<!DOCTYPE html>
<!-- saved from url=(0032)http://habrahabr.ru/post/120157/ -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru"><head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# article: http://ogp.me/ns/article#"><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		
		<title>Многопоточный сервер на C# за 15 минут / Хабрахабр</title>
		<meta name="description" content="C# довольно простой и гибкий язык. Вместе с .NET поставляется довольно много уже готовых классов, что делает его еще проще. Настолько, что вполне можно написать простой многопоточный HTTP-сервер...">		
		<meta name="keywords" content="http, сервер, how-to, c, threadpool, велосипед, хентай, доширак">
		
		
	<meta property="fb:app_id" content="437464306275519"> 
<meta property="og:type" content="article"> 
<meta property="og:url" content="http://habrahabr.ru/post/120157/"> 
<meta property="og:title" content="Многопоточный сервер на C# за 15 минут"> 

	
	<meta property="og:image" content="http://habrahabr.ru/i/habralogo.jpg">
	<link rel="image_src" href="http://habrahabr.ru/i/habralogo.jpg">

<meta property="og:description" content="C# довольно простой и гибкий язык. Вместе с .NET поставляется довольно много уже готовых классов, что делает его еще проще. Настолько, что вполне можно написать..."> 


		
		
			<link href="http://habrahabr.ru/styles/1354196613/all.css" rel="stylesheet" media="all">
		

		
		
  <link href="http://habrahabr.ru/styles/1354196613/_parts/posts.css" rel="stylesheet" media="all">
  <link href="http://habrahabr.ru/styles/1354196613/_parts/comments.css" rel="stylesheet" media="all">
  <link href="http://habrahabr.ru/styles/1354196613/forms.css" rel="stylesheet" media="all">
  <link href="http://habrahabr.ru/styles/1354196613/highlight.css" rel="stylesheet" media="all">
  <link href="http://habrahabr.ru/styles/1354196613/posts/all.css" rel="stylesheet" media="all">
  


	

		
		
			<script type="text/javascript" src="./index_files/all.js"></script><style class="flashcontrol" style="display: none;" type="text/css">/*FlashControl*/object[type$="x-shockwave-flash"]:not([classid]),object[type$="futuresplash"]:not([classid]),embed[type$="x-shockwave-flash"],embed[type$="futuresplash"]{display:none !important}</style>
		
		
		
		
		

	
	
	
	
		
  <script type="text/javascript" src="./index_files/jquery.form.js"></script>
  <script type="text/javascript" src="./index_files/jquery.cookie.js"></script>
  <script type="text/javascript" src="./index_files/wysiwyg.js"></script>
  <script type="text/javascript" src="./index_files/highlight.js"></script>
  <script type="text/javascript" src="./index_files/posts.js"></script>
  <script type="text/javascript" src="./index_files/comments.js"></script>
  <script type="text/javascript" src="./index_files/all(1).js"></script>

		
		<script type="text/javascript" src="./index_files/adriver.core.2.js"></script>
		
		
		
		<link title="Хабрахабр / Комментарии к публикации «Многопоточный сервер на C# за 15 минут»" type="application/rss+xml" rel="alternate" href="http://habrahabr.ru/rss/post/120157/">
				
		
			<script type="text/javascript">
			var _gaq = window._gaq || [];
			window.onerror = function(msg, url, line) {
			    //var preventErrorAlert = true;
			    //_gaq.push(['_trackEvent', 'JS Error', msg, navigator.userAgent + ' -> ' + url + " : " + line]);
			    //return preventErrorAlert;
			};
			
			jQuery.error = function (message) {
			    _gaq.push(['_trackEvent', 'jQuery Error', message, navigator.userAgent]);
			}
			</script>
		
		
		
			 
	<script async="true" src="./index_files/ga.js"></script><script id="facebook-jssdk" async="" src="./index_files/all(2).js"></script><style type="text/css">.fb_hidden{position:absolute;top:-10000px;z-index:10001}
.fb_invisible{display:none}
.fb_reset{background:none;border-spacing:0;border:0;color:#000;cursor:auto;direction:ltr;font-family:"lucida grande", tahoma, verdana, arial, sans-serif;font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:1;margin:0;overflow:visible;padding:0;text-align:left;text-decoration:none;text-indent:0;text-shadow:none;text-transform:none;visibility:visible;white-space:normal;word-spacing:normal}
.fb_link img{border:none}
.fb_dialog{background:rgba(82, 82, 82, .7);position:absolute;top:-10000px;z-index:10001}
.fb_dialog_advanced{padding:10px;-moz-border-radius:8px;-webkit-border-radius:8px;border-radius:8px}
.fb_dialog_content{background:#fff;color:#333}
.fb_dialog_close_icon{background:url(http://static.ak.fbcdn.net/rsrc.php/v2/yA/x/IE9JII6Z1Ys.png) no-repeat scroll 0 0 transparent;_background-image:url(http://static.ak.fbcdn.net/rsrc.php/v2/y6/x/s816eWC-2sl.gif);cursor:pointer;display:block;height:15px;position:absolute;right:18px;top:17px;width:15px;top:8px\9;right:7px\9}
.fb_dialog_mobile .fb_dialog_close_icon{top:5px;left:5px;right:auto}
.fb_dialog_padding{background-color:transparent;position:absolute;width:1px;z-index:-1}
.fb_dialog_close_icon:hover{background:url(http://static.ak.fbcdn.net/rsrc.php/v2/yA/x/IE9JII6Z1Ys.png) no-repeat scroll 0 -15px transparent;_background-image:url(http://static.ak.fbcdn.net/rsrc.php/v2/y6/x/s816eWC-2sl.gif)}
.fb_dialog_close_icon:active{background:url(http://static.ak.fbcdn.net/rsrc.php/v2/yA/x/IE9JII6Z1Ys.png) no-repeat scroll 0 -30px transparent;_background-image:url(http://static.ak.fbcdn.net/rsrc.php/v2/y6/x/s816eWC-2sl.gif)}
.fb_dialog_loader{background-color:#f2f2f2;border:1px solid #606060;font-size:24px;padding:20px}
.fb_dialog_top_left,
.fb_dialog_top_right,
.fb_dialog_bottom_left,
.fb_dialog_bottom_right{height:10px;width:10px;overflow:hidden;position:absolute}
/* @noflip */
.fb_dialog_top_left{background:url(http://static.ak.fbcdn.net/rsrc.php/v2/yR/x/8YeTNIlTZjm.png) no-repeat 0 0;left:-10px;top:-10px}
/* @noflip */
.fb_dialog_top_right{background:url(http://static.ak.fbcdn.net/rsrc.php/v2/yR/x/8YeTNIlTZjm.png) no-repeat 0 -10px;right:-10px;top:-10px}
/* @noflip */
.fb_dialog_bottom_left{background:url(http://static.ak.fbcdn.net/rsrc.php/v2/yR/x/8YeTNIlTZjm.png) no-repeat 0 -20px;bottom:-10px;left:-10px}
/* @noflip */
.fb_dialog_bottom_right{background:url(http://static.ak.fbcdn.net/rsrc.php/v2/yR/x/8YeTNIlTZjm.png) no-repeat 0 -30px;right:-10px;bottom:-10px}
.fb_dialog_vert_left,
.fb_dialog_vert_right,
.fb_dialog_horiz_top,
.fb_dialog_horiz_bottom{position:absolute;background:#525252;filter:alpha(opacity=70);opacity:.7}
.fb_dialog_vert_left,
.fb_dialog_vert_right{width:10px;height:100%}
.fb_dialog_vert_left{margin-left:-10px}
.fb_dialog_vert_right{right:0;margin-right:-10px}
.fb_dialog_horiz_top,
.fb_dialog_horiz_bottom{width:100%;height:10px}
.fb_dialog_horiz_top{margin-top:-10px}
.fb_dialog_horiz_bottom{bottom:0;margin-bottom:-10px}
.fb_dialog_iframe{line-height:0}
.fb_dialog_content .dialog_title{background:#6d84b4;border:1px solid #3b5998;color:#fff;font-size:14px;font-weight:bold;margin:0}
.fb_dialog_content .dialog_title > span{background:url(http://static.ak.fbcdn.net/rsrc.php/v2/yD/x/Cou7n-nqK52.gif)
no-repeat 5px 50%;float:left;padding:5px 0 7px 26px}
body.fb_hidden{-webkit-transform:none;height:100%;margin:0;left:-10000px;overflow:visible;position:absolute;top:-10000px;width:100%
}
.fb_dialog.fb_dialog_mobile.loading{background:url(http://static.ak.fbcdn.net/rsrc.php/v2/yc/x/3rhSv5V8j3o.gif)
white no-repeat 50% 50%;min-height:100%;min-width:100%;overflow:hidden;position:absolute;top:0;z-index:10001}
.fb_dialog.fb_dialog_mobile.loading.centered{max-height:590px;min-height:590px;max-width:500px;min-width:500px}
#fb-root #fb_dialog_ipad_overlay{background:rgba(0, 0, 0, .45);position:absolute;left:0;top:0;width:100%;min-height:100%;z-index:10000}
#fb-root #fb_dialog_ipad_overlay.hidden{display:none}
.fb_dialog.fb_dialog_mobile.loading iframe{visibility:hidden}
.fb_dialog_content .dialog_header{-webkit-box-shadow:white 0 1px 1px -1px inset;background:-webkit-gradient(linear, 0 0, 0 100%, from(#738ABA), to(#2C4987));border-bottom:1px solid;border-color:#1d4088;color:#fff;font:14px Helvetica, sans-serif;font-weight:bold;text-overflow:ellipsis;text-shadow:rgba(0, 30, 84, .296875) 0 -1px 0;vertical-align:middle;white-space:nowrap}
.fb_dialog_content .dialog_header table{-webkit-font-smoothing:subpixel-antialiased;height:43px;width:100%
}
.fb_dialog_content .dialog_header td.header_left{font-size:12px;padding-left:5px;vertical-align:middle;width:60px
}
.fb_dialog_content .dialog_header td.header_right{font-size:12px;padding-right:5px;vertical-align:middle;width:60px
}
.fb_dialog_content .touchable_button{background:-webkit-gradient(linear, 0 0, 0 100%, from(#4966A6),
color-stop(0.5, #355492), to(#2A4887));border:1px solid #29447e;-webkit-background-clip:padding-box;-webkit-border-radius:3px;-webkit-box-shadow:rgba(0, 0, 0, .117188) 0 1px 1px inset,
rgba(255, 255, 255, .167969) 0 1px 0;display:inline-block;margin-top:3px;max-width:85px;line-height:18px;padding:4px 12px;position:relative}
.fb_dialog_content .dialog_header .touchable_button input{border:none;background:none;color:#fff;font:12px Helvetica, sans-serif;font-weight:bold;margin:2px -12px;padding:2px 6px 3px 6px;text-shadow:rgba(0, 30, 84, .296875) 0 -1px 0}
.fb_dialog_content .dialog_header .header_center{color:#fff;font-size:16px;font-weight:bold;line-height:18px;text-align:center;vertical-align:middle}
.fb_dialog_content .dialog_content{background:url(http://static.ak.fbcdn.net/rsrc.php/v2/yJ/x/jKEcVPZFk-2.gif) no-repeat 50% 50%;border:1px solid #555;border-bottom:0;border-top:0;height:150px}
.fb_dialog_content .dialog_footer{background:#f2f2f2;border:1px solid #555;border-top-color:#ccc;height:40px}
#fb_dialog_loader_close{float:left}
.fb_dialog.fb_dialog_mobile .fb_dialog_close_button{text-shadow:rgba(0, 30, 84, .296875) 0 -1px 0}
.fb_dialog.fb_dialog_mobile .fb_dialog_close_icon{visibility:hidden}
.fb_iframe_widget{position:relative;display:-moz-inline-block;display:inline-block}
.fb_iframe_widget iframe{position:absolute}
.fb_iframe_widget_lift{z-index:1}
.fb_iframe_widget span{position:relative;display:inline-block;vertical-align:text-bottom;text-align:justify}
.fb_hide_iframes iframe{position:relative;left:-10000px}
.fb_iframe_widget_loader{position:relative;display:inline-block}
.fb_iframe_widget_fluid{display:inline}
.fb_iframe_widget_fluid span{width:100%}
.fb_iframe_widget_loader iframe{min-height:32px;z-index:2;zoom:1}
.fb_iframe_widget_loader .FB_Loader{background:url(http://static.ak.fbcdn.net/rsrc.php/v2/yJ/x/jKEcVPZFk-2.gif) no-repeat;height:32px;width:32px;margin-left:-16px;position:absolute;left:50%;z-index:4}
.fb_button_simple,
.fb_button_simple_rtl{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v2/yH/x/eIpbnVKI9lR.png);background-repeat:no-repeat;cursor:pointer;outline:none;text-decoration:none}
.fb_button_simple_rtl{background-position:right 0}
.fb_button_simple .fb_button_text{margin:0 0 0 20px;padding-bottom:1px}
.fb_button_simple_rtl .fb_button_text{margin:0 10px 0 0}
a.fb_button_simple:hover .fb_button_text,
a.fb_button_simple_rtl:hover .fb_button_text,
.fb_button_simple:hover .fb_button_text,
.fb_button_simple_rtl:hover .fb_button_text{text-decoration:underline}
.fb_button,
.fb_button_rtl{background:#29447e url(http://static.ak.fbcdn.net/rsrc.php/v2/yl/x/FGFbc80dUKj.png);background-repeat:no-repeat;cursor:pointer;display:inline-block;padding:0 0 0 1px;text-decoration:none;outline:none}
.fb_button .fb_button_text,
.fb_button_rtl .fb_button_text{background:#5f78ab url(http://static.ak.fbcdn.net/rsrc.php/v2/yl/x/FGFbc80dUKj.png);border-top:solid 1px #879ac0;border-bottom:solid 1px #1a356e;color:#fff;display:block;font-family:"lucida grande",tahoma,verdana,arial,sans-serif;font-weight:bold;padding:2px 6px 3px 6px;margin:1px 1px 0 21px;text-shadow:none}
a.fb_button,
a.fb_button_rtl,
.fb_button,
.fb_button_rtl{text-decoration:none}
a.fb_button:active .fb_button_text,
a.fb_button_rtl:active .fb_button_text,
.fb_button:active .fb_button_text,
.fb_button_rtl:active .fb_button_text{border-bottom:solid 1px #29447e;border-top:solid 1px #45619d;background:#4f6aa3;text-shadow:none}
.fb_button_xlarge,
.fb_button_xlarge_rtl{background-position:left -60px;font-size:24px;line-height:30px}
.fb_button_xlarge .fb_button_text{padding:3px 8px 3px 12px;margin-left:38px}
a.fb_button_xlarge:active{background-position:left -99px}
.fb_button_xlarge_rtl{background-position:right -268px}
.fb_button_xlarge_rtl .fb_button_text{padding:3px 8px 3px 12px;margin-right:39px}
a.fb_button_xlarge_rtl:active{background-position:right -307px}
.fb_button_large,
.fb_button_large_rtl{background-position:left -138px;font-size:13px;line-height:16px}
.fb_button_large .fb_button_text{margin-left:24px;padding:2px 6px 4px 6px}
a.fb_button_large:active{background-position:left -163px}
.fb_button_large_rtl{background-position:right -346px}
.fb_button_large_rtl .fb_button_text{margin-right:25px}
a.fb_button_large_rtl:active{background-position:right -371px}
.fb_button_medium,
.fb_button_medium_rtl{background-position:left -188px;font-size:11px;line-height:14px}
a.fb_button_medium:active{background-position:left -210px}
.fb_button_medium_rtl{background-position:right -396px}
.fb_button_text_rtl,
.fb_button_medium_rtl .fb_button_text{padding:2px 6px 3px 6px;margin-right:22px}
a.fb_button_medium_rtl:active{background-position:right -418px}
.fb_button_small,
.fb_button_small_rtl{background-position:left -232px;font-size:10px;line-height:10px}
.fb_button_small .fb_button_text{padding:2px 6px 3px;margin-left:17px}
a.fb_button_small:active,
.fb_button_small:active{background-position:left -250px}
.fb_button_small_rtl{background-position:right -440px}
.fb_button_small_rtl .fb_button_text{padding:2px 6px;margin-right:18px}
a.fb_button_small_rtl:active{background-position:right -458px}
.fb_share_count_wrapper{position:relative;float:left}
.fb_share_count{background:#b0b9ec none repeat scroll 0 0;color:#333;font-family:"lucida grande", tahoma, verdana, arial, sans-serif;text-align:center}
.fb_share_count_inner{background:#e8ebf2;display:block}
.fb_share_count_right{margin-left:-1px;display:inline-block}
.fb_share_count_right .fb_share_count_inner{border-top:solid 1px #e8ebf2;border-bottom:solid 1px #b0b9ec;margin:1px 1px 0 1px;font-size:10px;line-height:10px;padding:2px 6px 3px;font-weight:bold}
.fb_share_count_top{display:block;letter-spacing:-1px;line-height:34px;margin-bottom:7px;font-size:22px;border:solid 1px #b0b9ec}
.fb_share_count_nub_top{border:none;display:block;position:absolute;left:7px;top:35px;margin:0;padding:0;width:6px;height:7px;background-repeat:no-repeat;background-image:url(http://static.ak.fbcdn.net/rsrc.php/v2/yP/x/bSOHtKbCGYI.png)}
.fb_share_count_nub_right{border:none;display:inline-block;padding:0;width:5px;height:10px;background-repeat:no-repeat;background-image:url(http://static.ak.fbcdn.net/rsrc.php/v2/yL/x/i_oIVTKMYsL.png);vertical-align:top;background-position:right 5px;z-index:10;left:2px;margin:0 2px 0 0;position:relative}
.fb_share_no_count{display:none}
.fb_share_size_Small .fb_share_count_right .fb_share_count_inner{font-size:10px}
.fb_share_size_Medium .fb_share_count_right .fb_share_count_inner{font-size:11px;padding:2px 6px 3px;letter-spacing:-1px;line-height:14px}
.fb_share_size_Large .fb_share_count_right .fb_share_count_inner{font-size:13px;line-height:16px;padding:2px 6px 4px;font-weight:normal;letter-spacing:-1px}
.fb_share_count_hidden .fb_share_count_nub_top,
.fb_share_count_hidden .fb_share_count_top,
.fb_share_count_hidden .fb_share_count_nub_right,
.fb_share_count_hidden .fb_share_count_right{visibility:hidden}
.fb_connect_bar_container div,
.fb_connect_bar_container span,
.fb_connect_bar_container a,
.fb_connect_bar_container img,
.fb_connect_bar_container strong{background:none;border-spacing:0;border:0;direction:ltr;font-style:normal;font-variant:normal;letter-spacing:normal;line-height:1;margin:0;overflow:visible;padding:0;text-align:left;text-decoration:none;text-indent:0;text-shadow:none;text-transform:none;visibility:visible;white-space:normal;word-spacing:normal;vertical-align:baseline}
.fb_connect_bar_container{position:fixed;left:0 !important;right:0 !important;height:42px !important;padding:0 25px !important;margin:0 !important;vertical-align:middle !important;border-bottom:1px solid #333 !important;background:#3b5998 !important;z-index:99999999 !important;overflow:hidden !important}
.fb_connect_bar_container_ie6{position:absolute;top:expression(document.compatMode=="CSS1Compat"? document.documentElement.scrollTop+"px":body.scrollTop+"px")}
.fb_connect_bar{position:relative;margin:auto;height:100%;width:100%;padding:6px 0 0 0 !important;background:none;color:#fff !important;font-family:"lucida grande", tahoma, verdana, arial, sans-serif !important;font-size:13px !important;font-style:normal !important;font-variant:normal !important;font-weight:normal !important;letter-spacing:normal !important;line-height:1 !important;text-decoration:none !important;text-indent:0 !important;text-shadow:none !important;text-transform:none !important;white-space:normal !important;word-spacing:normal !important}
.fb_connect_bar a:hover{color:#fff}
.fb_connect_bar .fb_profile img{height:30px;width:30px;vertical-align:middle;margin:0 6px 5px 0}
.fb_connect_bar div a,
.fb_connect_bar span,
.fb_connect_bar span a{color:#bac6da;font-size:11px;text-decoration:none}
.fb_connect_bar .fb_buttons{float:right;margin-top:7px}
.fb_edge_widget_with_comment{position:relative;*z-index:1000}
.fb_edge_widget_with_comment span.fb_edge_comment_widget{position:absolute}
.fb_edge_widget_with_comment span.fb_send_button_form_widget{z-index:1}
.fb_edge_widget_with_comment span.fb_send_button_form_widget .FB_Loader{left:0;top:1px;margin-top:6px;margin-left:0;background-position:50% 50%;background-color:#fff;height:150px;width:394px;border:1px #666 solid;border-bottom:2px solid #283e6c;z-index:1}
.fb_edge_widget_with_comment span.fb_send_button_form_widget.dark .FB_Loader{background-color:#000;border-bottom:2px solid #ccc}
.fb_edge_widget_with_comment span.fb_send_button_form_widget.siderender
.FB_Loader{margin-top:0}
.fbpluginrecommendationsbarleft,
.fbpluginrecommendationsbarright{position:fixed !important;bottom:0;z-index:999}
/* @noflip */
.fbpluginrecommendationsbarleft{left:10px}
/* @noflip */
.fbpluginrecommendationsbarright{right:10px}
</style></head>

	<body>
	  






	<div id="topline" title=""><div style="position: relative; height: 90px;"><table width="100%" height="90" cellspacing="0" cellpadding="0" border="0" style="line-height: 100%; margin: 0; padding: 0;"><tbody><tr><td style="width: 50%; line-height: 100%; margin: 0; padding: 0;"><a target="_blank" href="http://ad.adriver.ru/cgi-bin/click.cgi?sid=176776&ad=299620&bid=1920324&bt=52&bn=1&pz=0&ref=http:%2f%2fhabrahabr.ru%2fpost%2f120157%2f&custom=1%3Dnet&rleurl="><img width="100%" vspace="0" hspace="0" height="90" border="0" src="./index_files/fon.png"></a></td><td width="1000" style="background-image:url(&#39;http://un1.adriver.ru/images/0001920/0001920324/0/fon.png&#39;); line-height: 100%; margin: 0; padding: 0;"><a href="http://ad.adriver.ru/cgi-bin/click.cgi?sid=176776&ad=299620&bid=1920324&bt=52&bn=1&pz=0&ref=http:%2f%2fhabrahabr.ru%2fpost%2f120157%2f&custom=1%3Dnet&rleurl=" target="_blank"><img src="./index_files/center.jpg" border="0" width="1000" height="90"></a></td><td style="width: 50%; line-height: 100%; margin: 0; padding: 0;"><a target="_blank" href="http://ad.adriver.ru/cgi-bin/click.cgi?sid=176776&ad=299620&bid=1920324&bt=52&bn=1&pz=0&ref=http:%2f%2fhabrahabr.ru%2fpost%2f120157%2f&custom=1%3Dnet&rleurl="><img width="100%" vspace="0" hspace="0" height="90" border="0" src="./index_files/fon.png"></a></td></tr></tbody></table></div></div>
	<script type="text/javascript">
	(function(){
		var custom = {};
		
			custom[1]	= 'net';
		
		new adriver("topline", {sid:176776, bt:52, bn:1, custom: custom});
	})();
	</script>




		
<!-- tns-counter.ru --> 
<script language="JavaScript" type="text/javascript"> 
	var img = new Image();
	img.src = 'http://www.tns-counter.ru/V13a***R>' + document.referrer.replace(/\*/g,'%2a') + '*thematicmedia_ru/ru/UTF-8/tmsec=habrahabr_total/' + Math.round(Math.random() * 1000000000);
</script> 
<noscript> 
	&lt;img src="http://www.tns-counter.ru/V13a****thematicmedia_ru/ru/UTF-8/tmsec=habrahabr_total/" width="1" height="1" alt=""&gt;
</noscript> 
<!--/ tns-counter.ru -->

		<div id="layout">
		  <div id="header">
  <div class="userpanel silver">
    
    
      <a href="http://habrahabr.ru/login/" class="login">войти</a> <a href="http://habrahabr.ru/register/">зарегистрироваться</a>
    
  </div>
  <a class="logo" href="http://habrahabr.ru/" title="На главную страницу"></a>
  <div class="search">
    <form id="search_form" name="search" method="get" action="http://habrahabr.ru/search/">
      <input type="submit" value="">
      <input type="text" name="q" x-webkit-speech="" speech="" autocomplete="off">
    </form>
  </div>


	<div class="main_menu">
		<a href="http://habrahabr.ru/posts/top/" class="active">посты</a><a href="http://habrahabr.ru/qa/">q&amp;a</a><a href="http://habrahabr.ru/events/coming/">события</a><a href="http://habrahabr.ru/hubs/">хабы</a><a href="http://habrahabr.ru/companies/">компании</a>
		<div class="banner_special">

	 

	 

	
	
		<!--  AdRiver code START. Type:135x35 Site: habrahabr PZ: 0 BN: 0 -->
		<script language="javascript" type="text/javascript"><!--
		var RndNum4NoCash = Math.round(Math.random() * 1000000000);
		var ar_Tail='unknown'; if (document.referrer) ar_Tail = escape(document.referrer);
		document.write(
		'<iframe src="http://ad.adriver.ru/cgi-bin/erle.cgi?'
		+ 'sid=176776&target=top&w=135&h=35&bt=25&pz=0&rnd=' + RndNum4NoCash + '&tail256=' + ar_Tail
		+ '" frameborder=0 vspace=0 hspace=0 width=135 height=35 marginwidth=0'
		+ ' marginheight=0 scrolling=no></iframe>');
		//--></script><iframe src="./index_files/erle(1).htm" frameborder="0" vspace="0" hspace="0" width="135" height="35" marginwidth="0" marginheight="0" scrolling="no"></iframe>
		<noscript>
		&lt;a href="http://ad.adriver.ru/cgi-bin/click.cgi?sid=176776&amp;bt=25&amp;pz=0&amp;rnd=795668059" target=_top&gt;
		&lt;img src="http://ad.adriver.ru/cgi-bin/rle.cgi?sid=176776&amp;bt=25&amp;pz=0&amp;rnd=795668059" alt="-AdRiver-" border=0 width=135 height=35&gt;&lt;/a&gt;
		</noscript>

		<!--  AdRiver code END  -->
	
	

</div>
		
	</div>


</div>


	
		  
	  
		  


	
  <div class="content_left">

	










	
  <div class="post shortcuts_item" id="post_120157">
  	<div class="published">28 мая 2011 в 16:26</div>
    <h1 class="title">
      
	    

	      
      
        <span class="post_title">Многопоточный сервер на C# за 15 минут</span>
      
      
      
      
      
			
			
      
			
			

  	</h1>
  	
  	
<div class="hubs">
	
		<a href="http://habrahabr.ru/hub/net/" class="hub " title="Вы не подписаны на этот хаб">.NET</a><span class="profiled_hub" title="Профильный хаб">*</span>
	
</div>

  	
  	<div class="content html_format">
  	C# довольно простой и гибкий язык. Вместе с .NET поставляется довольно много уже готовых классов, что делает его еще проще. Настолько, что вполне можно написать простой многопоточный HTTP-сервер для отдачи статического содержимого всего за 15 минут. Можно было бы использовать уже готовый класс <a href="http://msdn.microsoft.com/library/system.net.httplistener.aspx">HttpListener</a> и управиться еще быстрее, но цель этой статьи — показать, как вообще можно сделать нечто подобное в C#.<br>
<a name="habracut"></a><br>
Для начала создадим новый консольный проект:<br>
<blockquote><code><font color="black"><a href="http://s-c.me/21794/s">Copy&nbsp;Source</a>&nbsp;|&nbsp;<a href="http://s-c.me/21794/h">Copy&nbsp;HTML</a><ol>
<li><font color="#0000ff">using</font> System;</li>
<li><font color="#0000ff">using</font> System.Collections.Generic;</li>
<li><font color="#0000ff">using</font> System.Text;</li>
<li>&nbsp;</li>
<li><font color="#0000ff">namespace</font> HTTPServer</li>
<li>{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">class</font> <font color="#2b91af">Server</font></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">static void</font> Main(<font color="#0000ff">string</font>[] args)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>}</li>
<li>&nbsp;</li>
</ol></font></code></blockquote><br>
В .NET можно очень легко создать TCP-сервер при помощи класса TcpListener, чем мы и воспользуемся:<br>
<blockquote><code><font color="black"><a href="http://s-c.me/21796/s">Copy&nbsp;Source</a>&nbsp;|&nbsp;<a href="http://s-c.me/21796/h">Copy&nbsp;HTML</a><ol>
<li><font color="#0000ff">class</font> <font color="#2b91af">Server</font></li>
<li>{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#2b91af">TcpListener</font> Listener; <font color="#008000">//&nbsp;Объект,&nbsp;принимающий&nbsp;TCP-клиентов</font></li>
<li>&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Запуск&nbsp;сервера</font></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">public</font> <font color="#2b91af">Server</font>(<font color="#0000ff">int</font> Port)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Создаем&nbsp;"слушателя"&nbsp;для&nbsp;указанного&nbsp;порта</font></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Listener = <font color="#0000ff">new</font> <font color="#2b91af">TcpListener</font>(IPAddress.Any, Port);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Listener.Start(); <font color="#008000">//&nbsp;Запускаем&nbsp;его</font></li>
<li>&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;В&nbsp;бесконечном&nbsp;цикле</font></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">while</font> (<font color="#0000ff">true</font>)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Принимаем&nbsp;новых&nbsp;клиентов</font></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Listener.AcceptTcpClient();</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Остановка&nbsp;сервера</font></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;~<font color="#2b91af">Server</font>()</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Если&nbsp;"слушатель"&nbsp;был&nbsp;создан</font></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">if</font> (Listener != <font color="#0000ff">null</font>)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Остановим&nbsp;его</font></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Listener.Stop();</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">static void</font> Main(<font color="#0000ff">string</font>[] args)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Создадим&nbsp;новый&nbsp;сервер&nbsp;на&nbsp;порту&nbsp;80</font></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">new</font> <font color="#2b91af">Server</font>(<font color="#A31515">80</font>);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>} </li>
</ol></font></code></blockquote><br>
Если сейчас запустить приложение, то уже можно будет подключиться к порту 80 и… все. Соединение будет лишь простаивать впустую, так как отсутствует его обработчик и оно не закрывается со стороны сервера.<br>
Напишем самый простой обработчик:<br>
<blockquote><code><font color="black"><a href="http://s-c.me/21797/s">Copy&nbsp;Source</a>&nbsp;|&nbsp;<a href="http://s-c.me/21797/h">Copy&nbsp;HTML</a><ol>
<li><font color="#008000">//&nbsp;Класс-обработчик&nbsp;клиента</font></li>
<li><font color="#0000ff">class</font> <font color="#2b91af">Client</font></li>
<li>{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Конструктор&nbsp;класса.&nbsp;Ему&nbsp;нужно&nbsp;передавать&nbsp;принятого&nbsp;клиента&nbsp;от&nbsp;TcpListener</font></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">public</font> <font color="#2b91af">Client</font>(TcpClient <font color="#2b91af">Client</font>)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Код&nbsp;простой&nbsp;HTML-странички</font></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">string</font> Html = <font color="#A31515">"&lt;html&gt;&lt;body&gt;&lt;h1&gt;It&nbsp;works!&lt;/h1&gt;&lt;/body&gt;&lt;/html&gt;"</font>;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Необходимые&nbsp;заголовки:&nbsp;ответ&nbsp;сервера,&nbsp;тип&nbsp;и&nbsp;длина&nbsp;содержимого.&nbsp;После&nbsp;двух&nbsp;пустых&nbsp;строк&nbsp;-&nbsp;само&nbsp;содержимое</font></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">string</font> Str = <font color="#A31515">"HTTP/1.1&nbsp;200&nbsp;OK\nContent-type:&nbsp;text/html\nContent-Length:"</font> + Html.Length.ToString() + <font color="#A31515">"\n\n"</font> + Html;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Приведем&nbsp;строку&nbsp;к&nbsp;виду&nbsp;массива&nbsp;байт</font></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">byte</font>[] <font color="#2b91af">Buffer</font> = Encoding.ASCII.GetBytes(Str);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Отправим&nbsp;его&nbsp;клиенту</font></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#2b91af">Client</font>.GetStream().Write(<font color="#2b91af">Buffer</font>, <font color="#A31515">&nbsp;0</font>, <font color="#2b91af">Buffer</font>.Length);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Закроем&nbsp;соединение</font></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#2b91af">Client</font>.Close();</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>} </li>
</ol></font></code></blockquote><br>
Чтобы передать ему клиента, нужно изменить одну строчку в классе Server:<br>
<blockquote><code><font color="black"><a href="http://s-c.me/21798/s">Copy&nbsp;Source</a>&nbsp;|&nbsp;<a href="http://s-c.me/21798/h">Copy&nbsp;HTML</a><ol>
<li><font color="#008000">//&nbsp;Принимаем&nbsp;новых&nbsp;клиентов&nbsp;и&nbsp;передаем&nbsp;их&nbsp;на&nbsp;обработку&nbsp;новому&nbsp;экземпляру&nbsp;класса&nbsp;Client</font></li>
<li><font color="#0000ff">new</font> <font color="#2b91af">Client</font>(Listener.AcceptTcpClient()); </li>
</ol></font></code></blockquote><br>
Теперь можно запустить программу, открыть в браузере адрес <a href="http://127.0.0.1/">127.0.0.1</a> и увидеть большими буквами «It works!»<br>
Перед тем, как приступить к написанию парсера HTTP-запроса, сделаем наш сервер многопоточным. Для этого есть два способа: создавать вручную новый поток для каждого клиента или воспользоваться <a href="http://habrahabr.ru/blogs/net/109705/">пулом потоков</a>. У обоих способов есть свои преимущества и недостатки. Если создавать по потоку на каждого клиента, то сервер может не выдержать высокой нагрузки, но можно работать с практически неограниченным количеством клиентов одновременно. Если использовать пул потоков, то количество одновременно работающих потоков будет ограничено, но нельзя будет создать новый поток, пока не завершатся старые. Какой из способов вам больше подойдет, я не знаю, поэтому приведу пример обоих.<br>
Напишем простую процедуру потока, которая будет лишь создавать новый экземпляр класса Client:<br>
<blockquote><code><font color="black"><a href="http://s-c.me/21800/s">Copy&nbsp;Source</a>&nbsp;|&nbsp;<a href="http://s-c.me/21800/h">Copy&nbsp;HTML</a><ol>
<li><font color="#0000ff">static void</font> ClientThread(<font color="#2b91af">Object</font> StateInfo)</li>
<li>{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">new</font> <font color="#2b91af">Client</font>((TcpClient)StateInfo);</li>
<li>} </li>
</ol></font></code></blockquote><br>
Для использования первого способа нужно заменить только содержимое нашего бесконечного цикла приема клиентов:<br>
<blockquote><code><font color="black"><a href="http://s-c.me/21806/s">Copy&nbsp;Source</a>&nbsp;|&nbsp;<a href="http://s-c.me/21806/h">Copy&nbsp;HTML</a><ol>
<li><font color="#008000">//&nbsp;Принимаем&nbsp;нового&nbsp;клиента</font></li>
<li>TcpClient Client = Listener.AcceptTcpClient();</li>
<li><font color="#008000">//&nbsp;Создаем&nbsp;поток</font></li>
<li><font color="#2b91af">Thread Thread</font> = <font color="#0000ff">new</font> <font color="#2b91af">Thread</font>(<font color="#0000ff">new</font> <font color="#2b91af">ParameterizedThreadStart</font>(ClientThread));</li>
<li><font color="#008000">//&nbsp;И&nbsp;запускаем&nbsp;этот&nbsp;поток,&nbsp;передавая&nbsp;ему&nbsp;принятого&nbsp;клиента</font></li>
<li><font color="#2b91af">Thread</font>.Start(Client); </li>
</ol></font></code></blockquote><br>
Для второго способа нужно проделать то же самое:<br>
<blockquote><code><font color="black"><a href="http://s-c.me/21805/s">Copy&nbsp;Source</a>&nbsp;|&nbsp;<a href="http://s-c.me/21805/h">Copy&nbsp;HTML</a><ol>
<li><font color="#008000">//&nbsp;Принимаем&nbsp;новых&nbsp;клиентов.&nbsp;После&nbsp;того,&nbsp;как&nbsp;клиент&nbsp;был&nbsp;принят,&nbsp;он&nbsp;передается&nbsp;в&nbsp;новый&nbsp;поток&nbsp;(ClientThread)</font></li>
<li><font color="#008000">//&nbsp;с&nbsp;использованием&nbsp;пула&nbsp;потоков.</font></li>
<li>ThreadPool.QueueUserWorkItem(<font color="#0000ff">new</font> <font color="#2b91af">WaitCallback</font>(ClientThread), Listener.AcceptTcpClient()); </li>
</ol></font></code></blockquote><br>
Плюс надо установить максимальное и минимальное количество одновременно работающих потоков. Сделаем это в процедуре Main:<br>
<blockquote><code><font color="black"><a href="http://s-c.me/21808/s">Copy&nbsp;Source</a>&nbsp;|&nbsp;<a href="http://s-c.me/21808/h">Copy&nbsp;HTML</a><ol>
<li><font color="#008000">//&nbsp;Определим&nbsp;нужное&nbsp;максимальное&nbsp;количество&nbsp;потоков</font></li>
<li><font color="#008000">//&nbsp;Пусть&nbsp;будет&nbsp;по&nbsp;4&nbsp;на&nbsp;каждый&nbsp;процессор</font></li>
<li><font color="#0000ff">int</font> MaxThreadsCount = <font color="#2b91af">Environment</font>.ProcessorCount * <font color="#A31515">4</font>;</li>
<li><font color="#008000">//&nbsp;Установим&nbsp;максимальное&nbsp;количество&nbsp;рабочих&nbsp;потоков</font></li>
<li>ThreadPool.SetMaxThreads(MaxThreadsCount, MaxThreadsCount);</li>
<li><font color="#008000">//&nbsp;Установим&nbsp;минимальное&nbsp;количество&nbsp;рабочих&nbsp;потоков</font></li>
<li>ThreadPool.SetMinThreads(<font color="#A31515">2</font>, <font color="#A31515">2</font>); </li>
</ol></font></code></blockquote><br>
Максимальное количество потоков должно быть не меньше двух, так как в это число входит основной поток. Если установить единицу, то обработка клиента будет возможна лишь тогда, когда основной поток приостановил работу (например, ожидает нового клиента или была вызвана процедура Sleep).<br>
Итак, теперь переключимся целиком на класс Client начнем обрабатывать HTTP-запрос. Получим текст запроса от клиента:<br>
<blockquote><code><font color="black"><a href="http://s-c.me/21810/s">Copy&nbsp;Source</a>&nbsp;|&nbsp;<a href="http://s-c.me/21810/h">Copy&nbsp;HTML</a><ol>
<li><font color="#008000">//&nbsp;Объявим&nbsp;строку,&nbsp;в&nbsp;которой&nbsp;будет&nbsp;хранится&nbsp;запрос&nbsp;клиента</font></li>
<li><font color="#0000ff">string</font> Request = <font color="#A31515">""</font>;</li>
<li><font color="#008000">//&nbsp;Буфер&nbsp;для&nbsp;хранения&nbsp;принятых&nbsp;от&nbsp;клиента&nbsp;данных</font></li>
<li><font color="#0000ff">byte</font>[] <font color="#2b91af">Buffer</font> = <font color="#0000ff">new byte</font>[<font color="#A31515">1024</font>];</li>
<li><font color="#008000">//&nbsp;Переменная&nbsp;для&nbsp;хранения&nbsp;количества&nbsp;байт,&nbsp;принятых&nbsp;от&nbsp;клиента</font></li>
<li><font color="#0000ff">int</font> Count;</li>
<li><font color="#008000">//&nbsp;Читаем&nbsp;из&nbsp;потока&nbsp;клиента&nbsp;до&nbsp;тех&nbsp;пор,&nbsp;пока&nbsp;от&nbsp;него&nbsp;поступают&nbsp;данные</font></li>
<li><font color="#0000ff">while</font> ((Count = Client.GetStream().Read(<font color="#2b91af">Buffer</font>, <font color="#A31515">&nbsp;0</font>, <font color="#2b91af">Buffer</font>.Length)) &gt; <font color="#A31515">&nbsp;0</font>)</li>
<li>{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Преобразуем&nbsp;эти&nbsp;данные&nbsp;в&nbsp;строку&nbsp;и&nbsp;добавим&nbsp;ее&nbsp;к&nbsp;переменной&nbsp;Request</font></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;Request += Encoding.ASCII.GetString(<font color="#2b91af">Buffer</font>, <font color="#A31515">&nbsp;0</font>, Count);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Запрос&nbsp;должен&nbsp;обрываться&nbsp;последовательностью&nbsp;\r\n\r\n</font></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Либо&nbsp;обрываем&nbsp;прием&nbsp;данных&nbsp;сами,&nbsp;если&nbsp;длина&nbsp;строки&nbsp;Request&nbsp;превышает&nbsp;4&nbsp;килобайта</font></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Нам&nbsp;не&nbsp;нужно&nbsp;получать&nbsp;данные&nbsp;из&nbsp;POST-запроса&nbsp;(и&nbsp;т.&nbsp;п.),&nbsp;а&nbsp;обычный&nbsp;запрос</font></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;по&nbsp;идее&nbsp;не&nbsp;должен&nbsp;быть&nbsp;больше&nbsp;4&nbsp;килобайт</font></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">if</font> (Request.IndexOf(<font color="#A31515">"\r\n\r\n"</font>) &gt;= <font color="#A31515">&nbsp;0</font> || Request.Length &gt; <font color="#A31515">4096</font>)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">break</font>;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>} </li>
</ol></font></code></blockquote><br>
Далее осуществляем парсинг полученных данных:<blockquote><code><font color="black"><a href="http://s-c.me/21814/s">Copy&nbsp;Source</a>&nbsp;|&nbsp;<a href="http://s-c.me/21814/h">Copy&nbsp;HTML</a><ol>
<li><font color="#008000">//&nbsp;Парсим&nbsp;строку&nbsp;запроса&nbsp;с&nbsp;использованием&nbsp;регулярных&nbsp;выражений</font></li>
<li><font color="#008000">//&nbsp;При&nbsp;этом&nbsp;отсекаем&nbsp;все&nbsp;переменные&nbsp;GET-запроса</font></li>
<li><font color="#2b91af">Match</font> ReqMatch = <font color="#2b91af">Regex</font>.<font color="#2b91af">Match</font>(Request, <font color="#A31515">@"^\w+\s+([^\s\?]+)[^\s]*\s+HTTP/.*|"</font>);</li>
<li>&nbsp;</li>
<li><font color="#008000">//&nbsp;Если&nbsp;запрос&nbsp;не&nbsp;удался</font></li>
<li><font color="#0000ff">if</font> (ReqMatch == <font color="#2b91af">Match</font>.Empty)</li>
<li>{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Передаем&nbsp;клиенту&nbsp;ошибку&nbsp;400&nbsp;-&nbsp;неверный&nbsp;запрос</font></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;SendError(Client, <font color="#A31515">400</font>);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">return</font>;</li>
<li>}</li>
<li>&nbsp;</li>
<li><font color="#008000">//&nbsp;Получаем&nbsp;строку&nbsp;запроса</font></li>
<li><font color="#0000ff">string</font> RequestUri = ReqMatch.Groups[<font color="#A31515">1</font>].Value;</li>
<li>&nbsp;</li>
<li><font color="#008000">//&nbsp;Приводим&nbsp;ее&nbsp;к&nbsp;изначальному&nbsp;виду,&nbsp;преобразуя&nbsp;экранированные&nbsp;символы</font></li>
<li><font color="#008000">//&nbsp;Например,&nbsp;"%20"&nbsp;-&gt;&nbsp;"&nbsp;"</font></li>
<li>RequestUri = <font color="#2b91af">Uri</font>.UnescapeDataString(RequestUri);</li>
<li>&nbsp;</li>
<li><font color="#008000">//&nbsp;Если&nbsp;в&nbsp;строке&nbsp;содержится&nbsp;двоеточие,&nbsp;передадим&nbsp;ошибку&nbsp;400</font></li>
<li><font color="#008000">//&nbsp;Это&nbsp;нужно&nbsp;для&nbsp;защиты&nbsp;от&nbsp;URL&nbsp;типа&nbsp;http://example.com/../../file.txt</font></li>
<li><font color="#0000ff">if</font> (RequestUri.IndexOf(<font color="#A31515">".."</font>) &gt;= <font color="#A31515">&nbsp;0</font>)</li>
<li>{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;SendError(Client, <font color="#A31515">400</font>);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">return</font>;</li>
<li>}</li>
<li>&nbsp;</li>
<li><font color="#008000">//&nbsp;Если&nbsp;строка&nbsp;запроса&nbsp;оканчивается&nbsp;на&nbsp;"/",&nbsp;то&nbsp;добавим&nbsp;к&nbsp;ней&nbsp;index.html</font></li>
<li><font color="#0000ff">if</font> (RequestUri.EndsWith(<font color="#A31515">"/"</font>))</li>
<li>{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;RequestUri += <font color="#A31515">"index.html"</font>;</li>
<li>} </li>
</ol></font></code></blockquote><br>
Ну и наконец осуществим работу с файлами: проверим, есть ли нужный файл, определим его тип содержимого и передадим его клиенту.<br>
<blockquote><code><font color="black"><a href="http://s-c.me/21818/s">Copy&nbsp;Source</a>&nbsp;|&nbsp;<a href="http://s-c.me/21818/h">Copy&nbsp;HTML</a><ol>
<li><font color="#0000ff">string</font> FilePath = <font color="#A31515">"www/"</font> + RequestUri;</li>
<li>&nbsp;</li>
<li><font color="#008000">//&nbsp;Если&nbsp;в&nbsp;папке&nbsp;www&nbsp;не&nbsp;существует&nbsp;данного&nbsp;файла,&nbsp;посылаем&nbsp;ошибку&nbsp;404</font></li>
<li><font color="#0000ff">if</font> (!<font color="#2b91af">File</font>.Exists(FilePath))</li>
<li>{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;SendError(Client, <font color="#A31515">404</font>);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">return</font>;</li>
<li>}</li>
<li>&nbsp;</li>
<li><font color="#008000">//&nbsp;Получаем&nbsp;расширение&nbsp;файла&nbsp;из&nbsp;строки&nbsp;запроса</font></li>
<li><font color="#0000ff">string</font> Extension = RequestUri.Substring(RequestUri.LastIndexOf(<font color="#A31515">'.'</font>));</li>
<li>&nbsp;</li>
<li><font color="#008000">//&nbsp;Тип&nbsp;содержимого</font></li>
<li><font color="#0000ff">string</font> ContentType = <font color="#A31515">""</font>;</li>
<li>&nbsp;</li>
<li><font color="#008000">//&nbsp;Пытаемся&nbsp;определить&nbsp;тип&nbsp;содержимого&nbsp;по&nbsp;расширению&nbsp;файла</font></li>
<li><font color="#0000ff">switch</font> (Extension)</li>
<li>{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">case</font> <font color="#A31515">".htm"</font>:</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">case</font> <font color="#A31515">".html"</font>:</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ContentType = <font color="#A31515">"text/html"</font>;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">break</font>;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">case</font> <font color="#A31515">".css"</font>:</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ContentType = <font color="#A31515">"text/stylesheet"</font>;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">break</font>;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">case</font> <font color="#A31515">".js"</font>:</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ContentType = <font color="#A31515">"text/javascript"</font>;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">break</font>;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">case</font> <font color="#A31515">".jpg"</font>:</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ContentType = <font color="#A31515">"image/jpeg"</font>;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">break</font>;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">case</font> <font color="#A31515">".jpeg"</font>:</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">case</font> <font color="#A31515">".png"</font>:</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">case</font> <font color="#A31515">".gif"</font>:</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ContentType = <font color="#A31515">"image/"</font> + Extension.Substring(<font color="#A31515">1</font>);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">break</font>;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">default</font>:</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">if</font> (Extension.Length &gt; <font color="#A31515">1</font>)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ContentType = <font color="#A31515">"application/"</font> + Extension.Substring(<font color="#A31515">1</font>);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">else</font></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ContentType = <font color="#A31515">"application/unknown"</font>;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">break</font>;</li>
<li>}</li>
<li>&nbsp;</li>
<li><font color="#008000">//&nbsp;Открываем&nbsp;файл,&nbsp;страхуясь&nbsp;на&nbsp;случай&nbsp;ошибки</font></li>
<li><font color="#2b91af">FileStream</font> FS;</li>
<li><font color="#0000ff">try</font></li>
<li>{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;FS = <font color="#0000ff">new</font> <font color="#2b91af">FileStream</font>(FilePath, FileMode.Open, FileAccess.Read, FileShare.Read);</li>
<li>}</li>
<li><font color="#0000ff">catch</font> (<font color="#2b91af">Exception</font>)</li>
<li>{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Если&nbsp;случилась&nbsp;ошибка,&nbsp;посылаем&nbsp;клиенту&nbsp;ошибку&nbsp;500</font></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;SendError(Client, <font color="#A31515">500</font>);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">return</font>;</li>
<li>}</li>
<li>&nbsp;</li>
<li><font color="#008000">//&nbsp;Посылаем&nbsp;заголовки</font></li>
<li><font color="#0000ff">string</font> Headers = <font color="#A31515">"HTTP/1.1&nbsp;200&nbsp;OK\nContent-Type:&nbsp;"</font> + ContentType + <font color="#A31515">"\nContent-Length:&nbsp;"</font> + FS.Length + <font color="#A31515">"\n\n"</font>;</li>
<li><font color="#0000ff">byte</font>[] HeadersBuffer = Encoding.ASCII.GetBytes(Headers);</li>
<li>Client.GetStream().Write(HeadersBuffer, <font color="#A31515">&nbsp;0</font>, HeadersBuffer.Length);</li>
<li>&nbsp;</li>
<li><font color="#008000">//&nbsp;Пока&nbsp;не&nbsp;достигнут&nbsp;конец&nbsp;файла</font></li>
<li><font color="#0000ff">while</font> (FS.Position &lt; FS.Length)</li>
<li>{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Читаем&nbsp;данные&nbsp;из&nbsp;файла</font></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;Count = FS.Read(<font color="#2b91af">Buffer</font>, <font color="#A31515">&nbsp;0</font>, <font color="#2b91af">Buffer</font>.Length);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;И&nbsp;передаем&nbsp;их&nbsp;клиенту</font></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;Client.GetStream().Write(<font color="#2b91af">Buffer</font>, <font color="#A31515">&nbsp;0</font>, Count);</li>
<li>}</li>
<li>&nbsp;</li>
<li><font color="#008000">//&nbsp;Закроем&nbsp;файл&nbsp;и&nbsp;соединение</font></li>
<li>FS.Close();</li>
<li>Client.Close(); </li>
</ol></font></code></blockquote><br>
Также в коде упоминалась пока не описанная процедура SendError. Напишем и ее:<br>
<blockquote><code><font color="black"><a href="http://s-c.me/21817/s">Copy&nbsp;Source</a>&nbsp;|&nbsp;<a href="http://s-c.me/21817/h">Copy&nbsp;HTML</a><ol>
<li><font color="#008000">//&nbsp;Отправка&nbsp;страницы&nbsp;с&nbsp;ошибкой</font></li>
<li><font color="#0000ff">private void</font> SendError(<font color="#2b91af">TcpClient</font> Client, <font color="#0000ff">int</font> Code)</li>
<li>{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Получаем&nbsp;строку&nbsp;вида&nbsp;"200&nbsp;OK"</font></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;HttpStatusCode&nbsp;хранит&nbsp;в&nbsp;себе&nbsp;все&nbsp;статус-коды&nbsp;HTTP/1.1</font></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">string</font> CodeStr = Code.ToString() + <font color="#A31515">"&nbsp;"</font> + ((HttpStatusCode)Code).ToString();</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Код&nbsp;простой&nbsp;HTML-странички</font></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">string</font> Html = <font color="#A31515">"&lt;html&gt;&lt;body&gt;&lt;h1&gt;"</font> + CodeStr + <font color="#A31515">"&lt;/h1&gt;&lt;/body&gt;&lt;/html&gt;"</font>;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Необходимые&nbsp;заголовки:&nbsp;ответ&nbsp;сервера,&nbsp;тип&nbsp;и&nbsp;длина&nbsp;содержимого.&nbsp;После&nbsp;двух&nbsp;пустых&nbsp;строк&nbsp;-&nbsp;само&nbsp;содержимое</font></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">string</font> Str = <font color="#A31515">"HTTP/1.1&nbsp;"</font> + CodeStr + <font color="#A31515">"\nContent-type:&nbsp;text/html\nContent-Length:"</font> + Html.Length.ToString() + <font color="#A31515">"\n\n"</font> + Html;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Приведем&nbsp;строку&nbsp;к&nbsp;виду&nbsp;массива&nbsp;байт</font></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">byte</font>[] <font color="#2b91af">Buffer</font> = Encoding.ASCII.GetBytes(Str);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Отправим&nbsp;его&nbsp;клиенту</font></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;Client.GetStream().Write(<font color="#2b91af">Buffer</font>, <font color="#A31515">&nbsp;0</font>, <font color="#2b91af">Buffer</font>.Length);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Закроем&nbsp;соединение</font></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;Client.Close();</li>
<li>} </li>
</ol></font></code></blockquote><br>
На этом написание простого HTTP-сервера окончено. Оно работает в несколько потоков, отдает статику, имеет простую защиту от плохих запросов и ругается на отсутствующие файлы. На все это можно навесить дополнительные примочки: возможность конфигурирования, обработку доменов, изменение адресов наподобие mod_rewrite, даже поддержку CGI. Но это будет уже совсем другая история :-)<br>
<br>
<a href="http://test.nizarium.com/httpserver/source.html">Исходник (через ThreadPool)</a><br>
<a href="http://test.nizarium.com/httpserver/source2.html">Исходник (через Thread)</a><br>
<a href="http://test.nizarium.com/httpserver/HTTPServer.zip">Архив с исходником (через ThreadPool, вариант через Thread закомментирован)</a><br>
<a href="http://test.nizarium.com/httpserver/HTTPServerCompiled.zip">Архив с откомпилированной версией (через ThreadPool)</a> 
  	
  	<div class="clear"></div> 	
  	</div>
    
<ul class="tags">
	<li><a href="http://habrahabr.ru/search/?q=%5Bhttp%5D&target_type=posts" rel="tag">http</a></li><li>, <a href="http://habrahabr.ru/search/?q=%5B%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%5D&target_type=posts" rel="tag">сервер</a></li><li>, <a href="http://habrahabr.ru/search/?q=%5Bhow-to%5D&target_type=posts" rel="tag">how-to</a></li><li>, <a href="http://habrahabr.ru/search/?q=%5Bc%5D&target_type=posts" rel="tag">c</a></li><li>, <a href="http://habrahabr.ru/search/?q=%5Bthreadpool%5D&target_type=posts" rel="tag">threadpool</a></li><li>, <a href="http://habrahabr.ru/search/?q=%5B%D0%B2%D0%B5%D0%BB%D0%BE%D1%81%D0%B8%D0%BF%D0%B5%D0%B4%5D&target_type=posts" rel="tag">велосипед</a></li><li>, <a href="http://habrahabr.ru/search/?q=%5B%D1%85%D0%B5%D0%BD%D1%82%D0%B0%D0%B9%5D&target_type=posts" rel="tag">хентай</a></li><li>, <a href="http://habrahabr.ru/search/?q=%5B%D0%B4%D0%BE%D1%88%D0%B8%D1%80%D0%B0%D0%BA%5D&target_type=posts" rel="tag">доширак</a></li>
</ul>

    <div class="infopanel" id="infopanel_post_120157">

	
		
		
			<div class="voting   ">

				
				
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи."></span>
				

				<div class="mark positive ">
					
						<span class="score" title="Всего 94: ↑77 и ↓17">+60</span>
					
					
				</div>
				
				
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи."></span>
				
	
			</div>
		
	

	
		
	<div class="favorite">
		
		
			<a class="guest" href="http://habrahabr.ru/post/120157/#" onclick="return false;" title="Только зарегистрированные пользователи могут добавлять посты в избранное"></a>
		
	</div>
	<div class="favs_count" title="Количество пользователей, добавивших пост в избранное">164</div>
	
	
	
	

	

	


	
	
		
			<div class="author">
				<a title="Автор текста" href="http://habrahabr.ru/users/ertaquo/">ertaquo</a>
				<span class="rating" title="рейтинг пользователя">51,5</span>
				
					<a href="https://plus.google.com/107022717090983864554/?rel=author" class="googleplus_profile">G+</a>
				
			</div>
		
	
	

	

	
	
	
		<div class="share">
			<div class="twitter">
				<a href="http://twitter.com/intent/tweet?text=%D0%9C%D0%BD%D0%BE%D0%B3%D0%BE%D0%BF%D0%BE%D1%82%D0%BE%D1%87%D0%BD%D1%8B%D0%B9+%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80+%D0%BD%D0%B0+C%23+%D0%B7%D0%B0+15+%D0%BC%D0%B8%D0%BD%D1%83%D1%82+%23habr+http://habr.ru/p/120157/" title="Опубликовать ссылку в Twitter" target="_blank"></a>
			</div>
			<div class="vkontakte">
				<a href="http://vkontakte.ru/share.php?url=http://habr.ru/p/120157/" title="Опубликовать ссылку во ВКонтакте" onclick="window.open(this.href, &#39;Опубликовать ссылку во Вконтакте&#39;, &#39;width=800,height=300&#39;); return false"></a>
			</div>
			<div class="facebook">
				<a href="https://www.facebook.com/sharer/sharer.php?u=http://habr.ru/p/120157/" title="Опубликовать ссылку в Facebook" onclick="window.open(this.href, &#39;Опубликовать ссылку в Facebook&#39;, &#39;width=640,height=436,toolbar=0,status=0&#39;); return false"></a>
			</div>
			<div class="googleplus">
				<a href="https://plus.google.com/share?url=http://habr.ru/p/120157/" title="Опубликовать ссылку в Google Plus" onclick="window.open(this.href, &#39;Опубликовать ссылку в Google Plus&#39;, &#39;width=800,height=300&#39;); return false"></a>
			</div>
		</div>
	

</div>
<div class="clear"></div>


	

    
    
	</div>


	

	


	
<div class="comments_list " id="comments">

  <h2 class="title ">комментарии (<span id="comments_count">69</span>)
  

  </h2>

   
    
<div class="comment_item" id="comment_3936326">
	
	<span class="parent_id" data-parent_id="0"></span>
	
	
	
		<div class="info  " rel="3936326">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3936326" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark positive ">
						<span class="score" title="Всего 31: ↑25 и ↓6">+19</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/jimmy_webs/" class="avatar"><img src="./index_files/small_22242.png" alt=""></a>
			<a href="http://habrahabr.ru/users/jimmy_webs/" class="username">jimmy_webs</a><span class="comma">,</span>
			<time>28 мая 2011 в 16:45</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3936326" class="link_to_comment">#</a>
			
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			хм, без обид, но помнится что это было заданием на лабораторную работу для второго курса. =)<br>
<br>
Впрочем, если это первая статья в цикле, то задел хороший. 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3936326">
	 
		
<div class="comment_item" id="comment_3936330">
	
	<span class="parent_id" data-parent_id="3936326"></span>
	
	
	
		<div class="info  " rel="3936330">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3936330" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark positive ">
						<span class="score" title="Всего 18: ↑17 и ↓1">+16</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/ertaquo/" class="avatar"><img src="./index_files/small_38878.png" alt=""></a>
			<a href="http://habrahabr.ru/users/ertaquo/" class="username">ertaquo</a><span class="comma">,</span>
			<time>28 мая 2011 в 16:51</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3936330" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3936330" data-parent_id="3936326" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3936326" data-id="3936330" data-parent_id="3936326" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Ну, у нас на втором курсе в дельфях кнопочки на форму кидать учились. Так что тут я вам завидую :-) А на эту тему планирую еще одну статью, про конфиги и CGI. 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3936330">
	
	</div>
</div>

	 
		
<div class="comment_item" id="comment_3936625">
	
	<span class="parent_id" data-parent_id="3936326"></span>
	
	
	
		<div class="info  " rel="3936625">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3936625" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark positive ">
						<span class="score" title="Всего 6: ↑4 и ↓2">+2</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/Dudkin/" class="avatar"><img src="./index_files/stub-user-small.gif" alt=""></a>
			<a href="http://habrahabr.ru/users/Dudkin/" class="username">Dudkin</a><span class="comma">,</span>
			<time>28 мая 2011 в 20:28</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3936625" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3936625" data-parent_id="3936326" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3936326" data-id="3936625" data-parent_id="3936326" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			мне мало верится, что такому учат на втором курсе, ибо на «чисто программерских» специальностях на втором курсе обычно пилят ещё чистые С (и это ещё в лучшем случае), а на около программерских вообще таких вещей не изучают на лабах (максимум синтаксис и основные конструкции), всётаки http-server это достаточно частный пример. Где вы учились? 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3936625">
	 
		
<div class="comment_item" id="comment_3936630">
	
	<span class="parent_id" data-parent_id="3936625"></span>
	
	
	
		<div class="info  " rel="3936630">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3936630" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark  ">
						<span class="score" title="Всего 0: ↑0 и ↓0">0</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/elenbert/" class="avatar"><img src="./index_files/small_20992.jpg" alt=""></a>
			<a href="http://habrahabr.ru/users/elenbert/" class="username">elenbert</a><span class="comma">,</span>
			<time>28 мая 2011 в 20:32</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3936630" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3936630" data-parent_id="3936625" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3936625" data-id="3936630" data-parent_id="3936625" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			ХАИ, заочное отделение:<br>
1-2 курсы: паскаль, основы<br>
3 курс: ооп в делфи<br>
4 курс: структуры данных, базы данных<br>
5 курс: компиляторы, основы ИИ.<br>
<br>
как то так… 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3936630">
	 
		
<div class="comment_item" id="comment_3937925">
	
	<span class="parent_id" data-parent_id="3936630"></span>
	
	
	
		<div class="info  " rel="3937925">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3937925" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark  ">
						<span class="score" title="Всего 0: ↑0 и ↓0">0</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/AlexMorgun/" class="avatar"><img src="./index_files/small_53173.jpg" alt=""></a>
			<a href="http://habrahabr.ru/users/AlexMorgun/" class="username">AlexMorgun</a><span class="comma">,</span>
			<time>29 мая 2011 в 14:40</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3937925" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3937925" data-parent_id="3936630" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3936630" data-id="3937925" data-parent_id="3936630" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Аналогичная ситуация, ХНУРЭ.<br>
1-2 курсы: с++, основы 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3937925">
	
	</div>
</div>

	
	</div>
</div>

	 
		
<div class="comment_item" id="comment_3936724">
	
	<span class="parent_id" data-parent_id="3936625"></span>
	
	
	
		<div class="info  " rel="3936724">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3936724" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark positive ">
						<span class="score" title="Всего 1: ↑1 и ↓0">+1</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/jimmy_webs/" class="avatar"><img src="./index_files/small_22242.png" alt=""></a>
			<a href="http://habrahabr.ru/users/jimmy_webs/" class="username">jimmy_webs</a><span class="comma">,</span>
			<time>28 мая 2011 в 21:40</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3936724" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3936724" data-parent_id="3936625" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3936625" data-id="3936724" data-parent_id="3936625" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			МГТУ «Станкин» специальность «информационные системы»<br>
1 семестр — паскаль<br>
2 семестр — делфи, основы ООП<br>
3 семестр — Плюсы<br>
4 семестр — Шарп в курсе по программированию и сабж в курсе, дай бог память, вроде сетей ЭВМ и телекоммуникаций. 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3936724">
	 
		
<div class="comment_item" id="comment_3937126">
	
	<span class="parent_id" data-parent_id="3936724"></span>
	
	
	
		<div class="info  " rel="3937126">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3937126" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark  ">
						<span class="score" title="Всего 0: ↑0 и ↓0">0</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/Sing/" class="avatar"><img src="./index_files/small_24375.jpg" alt=""></a>
			<a href="http://habrahabr.ru/users/Sing/" class="username">Sing</a><span class="comma">,</span>
			<time>29 мая 2011 в 01:26</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3937126" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3937126" data-parent_id="3936724" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3936724" data-id="3937126" data-parent_id="3936724" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Боже мой, наши люди.<br>
<br>
Сейчас там не преподают делфи и плюсы больше, нет средств. Сразу после паскаля шарп. 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3937126">
	 
		
<div class="comment_item" id="comment_3937695">
	
	<span class="parent_id" data-parent_id="3937126"></span>
	
	
	
		<div class="info  " rel="3937695">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3937695" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark  ">
						<span class="score" title="Всего 0: ↑0 и ↓0">0</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/McManaman/" class="avatar"><img src="./index_files/small_12143.jpg" alt=""></a>
			<a href="http://habrahabr.ru/users/McManaman/" class="username">McManaman</a><span class="comma">,</span>
			<time>29 мая 2011 в 12:45</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3937695" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3937695" data-parent_id="3937126" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3937126" data-id="3937695" data-parent_id="3937126" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			МГГУ «Горный» специальность САПР(системы автоматизированного проектирования)<br>
1 курс — Паскаль, Делфи<br>
2 курс — Си++<br>
3 курс:<br>
 — 1 семестр — СУБД: MS SQL Server, GMax, Blender<br>
 — 2 семестр — MS Visual Studio и мышеводство на формах с использованием ADO.NET, OpenGL<br>
4 курс — пролог, псевдо-веб технологии, диплом 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3937695">
	
	</div>
</div>

	
	</div>
</div>

	
	</div>
</div>

	 
		
<div class="comment_item" id="comment_3936993">
	
	<span class="parent_id" data-parent_id="3936625"></span>
	
	
	
		<div class="info  " rel="3936993">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3936993" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark positive ">
						<span class="score" title="Всего 1: ↑1 и ↓0">+1</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/Rustam/" class="avatar"><img src="./index_files/stub-user-small.gif" alt=""></a>
			<a href="http://habrahabr.ru/users/Rustam/" class="username">Rustam</a><span class="comma">,</span>
			<time>29 мая 2011 в 00:09</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3936993" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3936993" data-parent_id="3936625" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3936625" data-id="3936993" data-parent_id="3936625" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			ИТМО, факультет информационных технологий и программирования.<br>
мы это (правда на джаве) недавно проходили.<br>
<br>
1 курс. паскаль, плюсы<br>
2 курс. джава, ассемблер.<br>
 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3936993">
	
	</div>
</div>

	 
		
<div class="comment_item" id="comment_3937046">
	
	<span class="parent_id" data-parent_id="3936625"></span>
	
	
	
		<div class="info  " rel="3937046">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3937046" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark positive ">
						<span class="score" title="Всего 1: ↑1 и ↓0">+1</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/cursed/" class="avatar"><img src="./index_files/small_24226.png" alt=""></a>
			<a href="http://habrahabr.ru/users/cursed/" class="username">cursed</a><span class="comma">,</span>
			<time>29 мая 2011 в 00:34</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3937046" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3937046" data-parent_id="3936625" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3936625" data-id="3937046" data-parent_id="3936625" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			БГУИР, ФИТУ — Искусственный интеллект<br>
1. С/C++: простенькие алгоритмы<br>
2. C++: WinApi, Java: OOP<br>
3. Операционные системы, сетевые протоколы, компиляторы, базы данных<br>
4. Обработка изображений, параллельная обработка данных<br>
5. Нейронные сети 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3937046">
	
	</div>
</div>

	 
		
<div class="comment_item" id="comment_3937048">
	
	<span class="parent_id" data-parent_id="3936625"></span>
	
	
	
		<div class="info  " rel="3937048">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3937048" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark  ">
						<span class="score" title="Всего 0: ↑0 и ↓0">0</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/ara89/" class="avatar"><img src="./index_files/small_58595.jpg" alt=""></a>
			<a href="http://habrahabr.ru/users/ara89/" class="username">ara89</a><span class="comma">,</span>
			<time>29 мая 2011 в 00:35</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3937048" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3937048" data-parent_id="3936625" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3936625" data-id="3937048" data-parent_id="3936625" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Донецк, Донну, кафедра компьютерных технологий<br>
1 курс — паскаль<br>
2 курс — плюсы, основы ООП на плюсах, WinAPI, структуры данных, базы данных<br>
3 курс — C#. Лаба по сетям на шарпе заключалась в получении бд с сервера и отображении на сервере. Почти сабж<br>
4 курс — джава<br>
<br>
Но вот если бы мне сейчас надо было писать ту лабу, топик бы очень даже помог. 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3937048">
	
	</div>
</div>

	 
		
<div class="comment_item" id="comment_3937119">
	
	<span class="parent_id" data-parent_id="3936625"></span>
	
	
	
		<div class="info  " rel="3937119">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3937119" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark  ">
						<span class="score" title="Всего 0: ↑0 и ↓0">0</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/usatikov/" class="avatar"><img src="./index_files/small_21892.jpg" alt=""></a>
			<a href="http://habrahabr.ru/users/usatikov/" class="username">usatikov</a><span class="comma">,</span>
			<time>29 мая 2011 в 01:23</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3937119" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3937119" data-parent_id="3936625" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3936625" data-id="3937119" data-parent_id="3936625" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			ВМиК МГУ, прикладная математика и информатика<br>
1 семестр — паскаль (и лекции по алгоритмам)<br>
2 семестр — ассемблер (архитектура ЭВМ)<br>
3 семестр — Си (операционные системы)<br>
4 семестр — С++ (формальные грамматики и языки)<br>
Потом разделение по кафедрам. Мы учили Яву, программистские кафедры — функциональные языки, Ява, БД и пр. 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3937119">
	 
		
<div class="comment_item" id="comment_3937122">
	
	<span class="parent_id" data-parent_id="3937119"></span>
	
	
	
		<div class="info  " rel="3937122">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3937122" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark positive ">
						<span class="score" title="Всего 3: ↑3 и ↓0">+3</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/usatikov/" class="avatar"><img src="./index_files/small_21892.jpg" alt=""></a>
			<a href="http://habrahabr.ru/users/usatikov/" class="username">usatikov</a><span class="comma">,</span>
			<time>29 мая 2011 в 01:25</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3937122" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3937122" data-parent_id="3937119" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3937119" data-id="3937122" data-parent_id="3937119" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Вообще, по-моему, было бы интересно в отдельной теме собрать информацию, кто что учил в универе. А потом свести всё в единую таблицу, и по программированию, и другие дисциплины.<br>
Нам было бы любопытно, абитуриентам полезно. 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3937122">
	
	</div>
</div>

	 
		
<div class="comment_item" id="comment_3938887">
	
	<span class="parent_id" data-parent_id="3937119"></span>
	
	
	
		<div class="info  " rel="3938887">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3938887" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark  ">
						<span class="score" title="Всего 0: ↑0 и ↓0">0</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/bazzilic/" class="avatar"><img src="./index_files/small_25116.jpg" alt=""></a>
			<a href="http://habrahabr.ru/users/bazzilic/" class="username">bazzilic</a><span class="comma">,</span>
			<time>30 мая 2011 в 00:19</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3938887" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3938887" data-parent_id="3937119" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3937119" data-id="3938887" data-parent_id="3937119" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Прикладные математические кафедры (2 поток) учат в основном Матлаб, хотя делать почти все практические вычислительные задачи разрешается в любом языке (включая VBA+Excel), главное, чтобы работало.<br>
<br>
Ну и да, на 3 курсе, все в обязательном порядке изучают БД (реляционные, нереляционные, алгоритмы, соотв. математика) и основы SQL. 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3938887">
	 
		
<div class="comment_item" id="comment_3938889">
	
	<span class="parent_id" data-parent_id="3938887"></span>
	
	
	
		<div class="info  " rel="3938889">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3938889" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark  ">
						<span class="score" title="Всего 0: ↑0 и ↓0">0</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/bazzilic/" class="avatar"><img src="./index_files/small_25116.jpg" alt=""></a>
			<a href="http://habrahabr.ru/users/bazzilic/" class="username">bazzilic</a><span class="comma">,</span>
			<time>30 мая 2011 в 00:21</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3938889" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3938889" data-parent_id="3938887" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3938887" data-id="3938889" data-parent_id="3938887" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Да, забыл, еще на 3 курсе все изучают машинную графику и сдают практическую работу в виде демосцены на OpenGL/DirectX с использованием всяких эффектов, шейдеров и т.д. 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3938889">
	
	</div>
</div>

	
	</div>
</div>

	
	</div>
</div>

	 
		
<div class="comment_item" id="comment_3942191">
	
	<span class="parent_id" data-parent_id="3936625"></span>
	
	
	
		<div class="info  " rel="3942191">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3942191" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark positive ">
						<span class="score" title="Всего 1: ↑1 и ↓0">+1</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/w1z/" class="avatar"><img src="./index_files/stub-user-small.gif" alt=""></a>
			<a href="http://habrahabr.ru/users/w1z/" class="username">w1z</a><span class="comma">,</span>
			<time>31 мая 2011 в 07:26</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3942191" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3942191" data-parent_id="3936625" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3936625" data-id="3942191" data-parent_id="3936625" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Политех (Казахстан), САПР заочное (псевдо дистанционное) отделение, сокращенное обучение после колледжа (родственная специальность).<br>
1 курс — C++/Pascal.<br>
2 курс — БД, Delphi.<br>
3 курс — Есть лабораторные выполняемые в Pascal!!!<br>
диплом.<br>
<br>
Как видите у нас ни Java, ни шарпом не пахнет.<br>
Самое веселое то, что я просил написать курсовые/лабы на C#, на что мне ответили отказом, опираясь якобы на «программу», в которой ведется весь учет курса.<br>
<br>
Всегда злило обучение, ни колледж, ни универ не дают реальных навыков которые требуются в работе, действительно, если хочешь чему-то научиться, то уж извини, сам. 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3942191">
	
	</div>
</div>

	
	</div>
</div>

	
	</div>
</div>

   
    
<div class="comment_item" id="comment_3936328">
	
	<span class="parent_id" data-parent_id="0"></span>
	
	
	
		<div class="info  " rel="3936328">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3936328" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark positive ">
						<span class="score" title="Всего 2: ↑2 и ↓0">+2</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/alexxz/" class="avatar"><img src="./index_files/stub-user-small.gif" alt=""></a>
			<a href="http://habrahabr.ru/users/alexxz/" class="username">alexxz</a><span class="comma">,</span>
			<time>28 мая 2011 в 16:49</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3936328" class="link_to_comment">#</a>
			
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			А где ж бенчмарки? Где потребление ресурсов на разных нагрузках?<br>
Нет, я понимаю что цель — не быстродействие, но хочется знать насколько производительно это решение за 20 минут. 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3936328">
	 
		
<div class="comment_item" id="comment_3936351">
	
	<span class="parent_id" data-parent_id="3936328"></span>
	
	
	
		<div class="info  " rel="3936351">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3936351" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark positive ">
						<span class="score" title="Всего 1: ↑1 и ↓0">+1</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/ertaquo/" class="avatar"><img src="./index_files/small_38878.png" alt=""></a>
			<a href="http://habrahabr.ru/users/ertaquo/" class="username">ertaquo</a><span class="comma">,</span>
			<time>28 мая 2011 в 17:07</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3936351" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3936351" data-parent_id="3936328" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3936328" data-id="3936351" data-parent_id="3936328" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Проверил через wbox. Отладочная сборка, через ThreadPool (8 потоков). В спокойном режиме жрет 2,7 метра памяти. При 25 клиентах жрет 3,3 метра и 2% процессора. При 100 клиентах — 3,6 метра и до 15%. При отключении клиента может выдавать ошибку (но не завершаться полностью). Ошибка связана с отсутствием в коде лишних блоков try/catch, которые я не стал писать для простоты (достаточно будет экранировать new Client((TcpClient)StateInfo); в ClientThread, пусть это будет не совсем логически верно). 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3936351">
	 
		
<div class="comment_item" id="comment_3936622">
	
	<span class="parent_id" data-parent_id="3936351"></span>
	
	
	
		<div class="info  " rel="3936622">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3936622" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark positive ">
						<span class="score" title="Всего 1: ↑1 и ↓0">+1</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/Houston/" class="avatar"><img src="./index_files/small_21178.jpg" alt=""></a>
			<a href="http://habrahabr.ru/users/Houston/" class="username">Houston</a><span class="comma">,</span>
			<time>28 мая 2011 в 20:27</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3936622" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3936622" data-parent_id="3936351" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3936351" data-id="3936622" data-parent_id="3936351" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			2% какого процессора-то? 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3936622">
	
	</div>
</div>

	
	</div>
</div>

	 
		
<div class="comment_item" id="comment_3936364">
	
	<span class="parent_id" data-parent_id="3936328"></span>
	
	
	
		<div class="info  " rel="3936364">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3936364" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark positive ">
						<span class="score" title="Всего 2: ↑2 и ↓0">+2</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/ap3rus/" class="avatar"><img src="./index_files/small_10941.jpg" alt=""></a>
			<a href="http://habrahabr.ru/users/ap3rus/" class="username">ap3rus</a><span class="comma">,</span>
			<time>28 мая 2011 в 17:24</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3936364" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3936364" data-parent_id="3936328" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3936328" data-id="3936364" data-parent_id="3936328" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			HttpListener вообще по производительности получится быстрее TcpListener, так как использует напрямую драйвер ОС http.sys, поэтому бенчмарки ничего бы путного не показали 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3936364">
	 
		
<div class="comment_item" id="comment_3936366">
	
	<span class="parent_id" data-parent_id="3936364"></span>
	
	
	
		<div class="info  " rel="3936366">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3936366" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark  ">
						<span class="score" title="Всего 0: ↑0 и ↓0">0</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/ap3rus/" class="avatar"><img src="./index_files/small_10941.jpg" alt=""></a>
			<a href="http://habrahabr.ru/users/ap3rus/" class="username">ap3rus</a><span class="comma">,</span>
			<time>28 мая 2011 в 17:25</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3936366" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3936366" data-parent_id="3936364" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3936364" data-id="3936366" data-parent_id="3936364" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			(разумеется, имел ввиду быстрее чем реализация веб-сервера с помощью TcpListener) 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3936366">
	
	</div>
</div>

	 
		
<div class="comment_item" id="comment_3936602">
	
	<span class="parent_id" data-parent_id="3936364"></span>
	
	
	
		<div class="info  " rel="3936602">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3936602" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark positive ">
						<span class="score" title="Всего 10: ↑6 и ↓4">+2</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/acmer/" class="avatar"><img src="./index_files/small_24247.jpg" alt=""></a>
			<a href="http://habrahabr.ru/users/acmer/" class="username">acmer</a><span class="comma">,</span>
			<time>28 мая 2011 в 20:17</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3936602" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3936602" data-parent_id="3936364" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3936364" data-id="3936602" data-parent_id="3936364" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			О ужас! HTTP в ядре?? 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3936602">
	 
		
<div class="comment_item" id="comment_3936794">
	
	<span class="parent_id" data-parent_id="3936602"></span>
	
	
	
		<div class="info  " rel="3936794">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3936794" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark positive ">
						<span class="score" title="Всего 5: ↑3 и ↓2">+1</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/kekekeks/" class="avatar"><img src="./index_files/small_23437.jpg" alt=""></a>
			<a href="http://habrahabr.ru/users/kekekeks/" class="username">kekekeks</a><span class="comma">,</span>
			<time>28 мая 2011 в 22:20</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3936794" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3936794" data-parent_id="3936602" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3936602" data-id="3936794" data-parent_id="3936602" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Вы ещё весь TCP-стек в юзерленд вынести предложите. Такой же протокол как и все остальные. В ядре ему самое место, смысл данные туда-сюда гонять, если их можно в одном месте обработать? 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3936794">
	 
		
<div class="comment_item" id="comment_3937175">
	
	<span class="parent_id" data-parent_id="3936794"></span>
	
	
	
		<div class="info  " rel="3937175">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3937175" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark positive ">
						<span class="score" title="Всего 5: ↑3 и ↓2">+1</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/acmer/" class="avatar"><img src="./index_files/small_24247.jpg" alt=""></a>
			<a href="http://habrahabr.ru/users/acmer/" class="username">acmer</a><span class="comma">,</span>
			<time>29 мая 2011 в 01:57</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3937175" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3937175" data-parent_id="3936794" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3936794" data-id="3937175" data-parent_id="3936794" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Вы еще предложите все программы в ядре запускать. Ведь зачем же данные туда-сюда гонять)) 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3937175">
	 
		
<div class="comment_item" id="comment_3937388">
	
	<span class="parent_id" data-parent_id="3937175"></span>
	
	
	
		<div class="info  " rel="3937388">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3937388" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark positive ">
						<span class="score" title="Всего 6: ↑5 и ↓1">+4</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/kekekeks/" class="avatar"><img src="./index_files/small_23437.jpg" alt=""></a>
			<a href="http://habrahabr.ru/users/kekekeks/" class="username">kekekeks</a><span class="comma">,</span>
			<time>29 мая 2011 в 08:29</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3937388" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3937388" data-parent_id="3937175" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3937175" data-id="3937388" data-parent_id="3937175" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Глупость сказали. Вы, вероятнее всего, никогда не писали высоконагруженный софт. Там идёт экономия на каждом вызове к ядру, ибо любой обмен данными с ядром — это немаленький такой оверхед, который жрёт процессорное время со страшной силой. Недавно вот писали, что линуксу сейчас прикручивают механизм группировки сисколов, чтобы несколько вызовов шло ядру в одном пакете. Никогда не задумывались, зачем?<br>
И какой смысл делать n запросов на чтение из сокета (в котором данные появляются по кускам), если можно <i>одним</i> вытащить уже распарсенный http-запрос? 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3937388">
	
	</div>
</div>

	
	</div>
</div>

	
	</div>
</div>

	
	</div>
</div>

	
	</div>
</div>

	
	</div>
</div>

   
    
<div class="comment_item" id="comment_3936344">
	
	<span class="parent_id" data-parent_id="0"></span>
	
	
	
		<div class="info  " rel="3936344">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3936344" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark positive ">
						<span class="score" title="Всего 5: ↑3 и ↓2">+1</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/adontz/" class="avatar"><img src="./index_files/stub-user-small.gif" alt=""></a>
			<a href="http://habrahabr.ru/users/adontz/" class="username">adontz</a><span class="comma">,</span>
			<time>28 мая 2011 в 17:01</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3936344" class="link_to_comment">#</a>
			
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Это пример того как НЕ надо писать код. Вы не используете IOCP (следствие — ужасная масштабируемость), а для HTTP вообще есть специальное API. 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3936344">
	 
		
<div class="comment_item" id="comment_3936356">
	
	<span class="parent_id" data-parent_id="3936344"></span>
	
	
	
		<div class="info  " rel="3936356">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3936356" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark positive ">
						<span class="score" title="Всего 4: ↑4 и ↓0">+4</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/ertaquo/" class="avatar"><img src="./index_files/small_38878.png" alt=""></a>
			<a href="http://habrahabr.ru/users/ertaquo/" class="username">ertaquo</a><span class="comma">,</span>
			<time>28 мая 2011 в 17:15</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3936356" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3936356" data-parent_id="3936344" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3936344" data-id="3936356" data-parent_id="3936344" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Про IOCP я знаю, но оно не входит в .NET (по меньшей мере, те статьи на эту тему, которые я находил в интернете, используют неуправляемый код). Про HttpListener я написал в первом абзаце. Целью статьи было написать <u>простой</u> HTTP-сервер на .NET. За основу брался еще более простой <a href="http://www.rsdn.ru/forum/src/322274.1.aspx">код с RSDN</a>. 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3936356">
	 
		
<div class="comment_item" id="comment_3936439">
	
	<span class="parent_id" data-parent_id="3936356"></span>
	
	
	
		<div class="info  " rel="3936439">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3936439" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark positive ">
						<span class="score" title="Всего 5: ↑4 и ↓1">+3</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/adontz/" class="avatar"><img src="./index_files/stub-user-small.gif" alt=""></a>
			<a href="http://habrahabr.ru/users/adontz/" class="username">adontz</a><span class="comma">,</span>
			<time>28 мая 2011 в 18:22</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3936439" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3936439" data-parent_id="3936356" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3936356" data-id="3936439" data-parent_id="3936356" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Ну здрасьте, а BeginAccept, BeginSend, BeginReceive по вашему как работают, если не через IOCP? Там самый что ни на есть IOCP!<br>
<br>
А что касается форума РСДН: Исходники, то там много хлама. 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3936439">
	 
		
<div class="comment_item" id="comment_3936929">
	
	<span class="parent_id" data-parent_id="3936439"></span>
	
	
	
		<div class="info  " rel="3936929">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3936929" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark  ">
						<span class="score" title="Всего 0: ↑0 и ↓0">0</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/ertaquo/" class="avatar"><img src="./index_files/small_38878.png" alt=""></a>
			<a href="http://habrahabr.ru/users/ertaquo/" class="username">ertaquo</a><span class="comma">,</span>
			<time>28 мая 2011 в 23:38</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3936929" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3936929" data-parent_id="3936439" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3936439" data-id="3936929" data-parent_id="3936439" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Пардон, вот этого не знал. Спасибо, учту. 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3936929">
	
	</div>
</div>

	
	</div>
</div>

	 
		
<div class="comment_item" id="comment_3937081">
	
	<span class="parent_id" data-parent_id="3936356"></span>
	
	
	
		<div class="info  " rel="3937081">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3937081" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark positive ">
						<span class="score" title="Всего 1: ↑1 и ↓0">+1</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/lair/" class="avatar"><img src="./index_files/stub-user-small.gif" alt=""></a>
			<a href="http://habrahabr.ru/users/lair/" class="username">lair</a><span class="comma">,</span>
			<time>29 мая 2011 в 00:51</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3937081" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3937081" data-parent_id="3936356" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3936356" data-id="3937081" data-parent_id="3936356" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			«Про IOCP я знаю, но оно не входит в .NET (по меньшей мере, те статьи на эту тему, которые я находил в интернете, используют неуправляемый код). „<br>
И это в то время, как в последней рихтеровской CLR via C# мало того, что рассказано про IOCP, так еще и есть пример кода… сервера (правда, будем честными, пайпового) под .net. 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3937081">
	
	</div>
</div>

	
	</div>
</div>

	
	</div>
</div>

   
    
<div class="comment_item" id="comment_3936359">
	
	<span class="parent_id" data-parent_id="0"></span>
	
	
	
		<div class="info  " rel="3936359">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3936359" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark positive ">
						<span class="score" title="Всего 4: ↑4 и ↓0">+4</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/Alser/" class="avatar"><img src="./index_files/small_25273.jpg" alt=""></a>
			<a href="http://habrahabr.ru/users/Alser/" class="username">Alser</a><span class="comma">,</span>
			<time>28 мая 2011 в 17:17</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3936359" class="link_to_comment">#</a>
			
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Как-то финализатор класса Server нелепо смотрится. Здесь разумнее реализовать IDisposable, а TcpListener должен сам остановиться, когда его GC найдет. 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3936359">
	 
		
<div class="comment_item" id="comment_3936995">
	
	<span class="parent_id" data-parent_id="3936359"></span>
	
	
	
		<div class="info  " rel="3936995">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3936995" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark positive ">
						<span class="score" title="Всего 7: ↑7 и ↓0">+7</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/Dimchansky/" class="avatar"><img src="./index_files/small_4765.png" alt=""></a>
			<a href="http://habrahabr.ru/users/Dimchansky/" class="username">Dimchansky</a><span class="comma">,</span>
			<time>29 мая 2011 в 00:10</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3936995" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3936995" data-parent_id="3936359" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3936359" data-id="3936995" data-parent_id="3936359" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Я бы сказал, что финализатор не только нелепо смотрится, но это и показательный пример того, как делать не надо. И за бездумное использование финализаторов, считаю, нужно устраивать публичную порку. :) <br>
Объясню почему. Тот же <a href="http://msdn.microsoft.com/ru-ru/library/system.net.sockets.tcplistener.stop.aspx">TcpListener.Stop</a> метод может легко кинуть SocketException. А что это значит для нас? Это значит, что возникни это исключение в финализаторе и вся аппликация упадет, причем так, что мы даже не узнаем, что и где случилось. 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3936995">
	 
		
<div class="comment_item" id="comment_3937069">
	
	<span class="parent_id" data-parent_id="3936995"></span>
	
	
	
		<div class="info  " rel="3937069">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3937069" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark  ">
						<span class="score" title="Всего 0: ↑0 и ↓0">0</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/ertaquo/" class="avatar"><img src="./index_files/small_38878.png" alt=""></a>
			<a href="http://habrahabr.ru/users/ertaquo/" class="username">ertaquo</a><span class="comma">,</span>
			<time>29 мая 2011 в 00:45</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3937069" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3937069" data-parent_id="3936995" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3936995" data-id="3937069" data-parent_id="3936995" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Спасибо, учту на будущее :-) 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3937069">
	
	</div>
</div>

	 
		
<div class="comment_item" id="comment_3937320">
	
	<span class="parent_id" data-parent_id="3936995"></span>
	
	
	
		<div class="info  " rel="3937320">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3937320" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark  negative">
						<span class="score" title="Всего 14: ↑6 и ↓8">–2</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/mlurker/" class="avatar"><img src="./index_files/small_12159.jpg" alt=""></a>
			<a href="http://habrahabr.ru/users/mlurker/" class="username">mlurker</a><span class="comma">,</span>
			<time>29 мая 2011 в 05:34</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3937320" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3937320" data-parent_id="3936995" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3936995" data-id="3937320" data-parent_id="3936995" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format bad bad2">
			<blockquote>и вся аппликация упадет</blockquote><br>
<a href="http://ru.wikipedia.org/wiki/%D0%90%D0%BF%D0%BF%D0%BB%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F">Аппликация</a> — вырезание и наклеивание (нашивание) фигурок, узоров или целых картин из кусочков бумаги, ткани, кожи, растительных и прочих материалов на материал-основу (фон). 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3937320">
	
	</div>
</div>

	 
		
<div class="comment_item" id="comment_3937404">
	
	<span class="parent_id" data-parent_id="3936995"></span>
	
	
	
		<div class="info  " rel="3937404">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3937404" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark positive ">
						<span class="score" title="Всего 4: ↑4 и ↓0">+4</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/Alser/" class="avatar"><img src="./index_files/small_25273.jpg" alt=""></a>
			<a href="http://habrahabr.ru/users/Alser/" class="username">Alser</a><span class="comma">,</span>
			<time>29 мая 2011 в 09:02</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3937404" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3937404" data-parent_id="3936995" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3936995" data-id="3937404" data-parent_id="3936995" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Правильно, но тут даже если мы перехватим все исключения — ничего путного не выйдет :)<br>
Очистка объектов с финализаторами производится за 2 сборки мусора, поэтому у объекта больше шансов попасть во 2-е поколение, которое собирается реже. GC может работать в несколько потоков (как например при фоновой сборке в .net 4, когда объекты поколений 0-1 и 2 собираются в разных потоках), поэтому Listener != null не спасет, надо ставить мьютекс, что опять же чревато (к управляемым ссылками тут обращаться вообще не стоит). Наконец объект TcpListener имеет свой финализатор, т.е. этот наш ~Server не делает ровным счетом ничего, кроме как создает проблемы :)<br>
О финализаторах лучше забыть как о страшном сне до тех пор, пока не понадобится работать с неуправляемыми ресурсами. А сама статья неплохая, про основы сокетов и потоков :) 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3937404">
	
	</div>
</div>

	 
		
<div class="comment_item" id="comment_3937512">
	
	<span class="parent_id" data-parent_id="3936995"></span>
	
	
	
		<div class="info  " rel="3937512">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3937512" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark  ">
						<span class="score" title="Всего 0: ↑0 и ↓0">0</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/mike114/" class="avatar"><img src="./index_files/stub-user-small.gif" alt=""></a>
			<a href="http://habrahabr.ru/users/mike114/" class="username">mike114</a><span class="comma">,</span>
			<time>29 мая 2011 в 10:50</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3937512" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3937512" data-parent_id="3936995" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3936995" data-id="3937512" data-parent_id="3936995" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Меня больше беспокоит, что ссылка на объект Server нигде не сохраняется. Не умрет ли он в релизной сборке? Кстати, в конкретном примере финализатор будет вызван только при остановке приложения и исключение в нем самому приложению не повредит. Ну а IDisposable нужен только там, где управление освобождением ресурсов осуществляется (или подразумевается, что будет осуществляться) вручную. 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3937512">
	 
		
<div class="comment_item" id="comment_3937672">
	
	<span class="parent_id" data-parent_id="3937512"></span>
	
	
	
		<div class="info  " rel="3937672">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3937672" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark  ">
						<span class="score" title="Всего 0: ↑0 и ↓0">0</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/kekekeks/" class="avatar"><img src="./index_files/small_23437.jpg" alt=""></a>
			<a href="http://habrahabr.ru/users/kekekeks/" class="username">kekekeks</a><span class="comma">,</span>
			<time>29 мая 2011 в 12:34</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3937672" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3937672" data-parent_id="3937512" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3937512" data-id="3937672" data-parent_id="3937512" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Не умрёт. Часто использую конструкцию new Thread(MyProc).Start(); и никто от этого не умер. 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3937672">
	 
		
<div class="comment_item" id="comment_3937711">
	
	<span class="parent_id" data-parent_id="3937672"></span>
	
	
	
		<div class="info  " rel="3937711">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3937711" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark  ">
						<span class="score" title="Всего 0: ↑0 и ↓0">0</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/mike114/" class="avatar"><img src="./index_files/stub-user-small.gif" alt=""></a>
			<a href="http://habrahabr.ru/users/mike114/" class="username">mike114</a><span class="comma">,</span>
			<time>29 мая 2011 в 12:54</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3937711" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3937711" data-parent_id="3937672" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3937672" data-id="3937711" data-parent_id="3937672" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Ммм… немного некорректный пример, так как новый поток сам является источником корней для графа объектов и его-то GC собирать не будет, но ответ про «не умрет» все равно верный, так как, по сути, основной поток навсегда замирает в конструкторе объекта. 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3937711">
	 
		
<div class="comment_item" id="comment_3938023">
	
	<span class="parent_id" data-parent_id="3937711"></span>
	
	
	
		<div class="info  " rel="3938023">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3938023" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark  ">
						<span class="score" title="Всего 0: ↑0 и ↓0">0</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/kekekeks/" class="avatar"><img src="./index_files/small_23437.jpg" alt=""></a>
			<a href="http://habrahabr.ru/users/kekekeks/" class="username">kekekeks</a><span class="comma">,</span>
			<time>29 мая 2011 в 15:32</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3938023" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3938023" data-parent_id="3937711" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3937711" data-id="3938023" data-parent_id="3937711" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Вы не говорили про GC. Вы говорили про релизную сборку. Работа компилятора по вырезанию лишнего хлама и работа GC — несколько разные вещи. 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3938023">
	 
		
<div class="comment_item" id="comment_3938079">
	
	<span class="parent_id" data-parent_id="3938023"></span>
	
	
	
		<div class="info  " rel="3938079">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3938079" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark  ">
						<span class="score" title="Всего 0: ↑0 и ↓0">0</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/mike114/" class="avatar"><img src="./index_files/stub-user-small.gif" alt=""></a>
			<a href="http://habrahabr.ru/users/mike114/" class="username">mike114</a><span class="comma">,</span>
			<time>29 мая 2011 в 16:03</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3938079" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3938079" data-parent_id="3938023" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3938023" data-id="3938079" data-parent_id="3938023" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Простите, под смертью я подразумевал удаление посредством GC из-за отсутствия корня. В дебаге этого не происходит, а в релизе — обычное дело. 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3938079">
	
	</div>
</div>

	
	</div>
</div>

	
	</div>
</div>

	
	</div>
</div>

	
	</div>
</div>

	 
		
<div class="comment_item" id="comment_3938902">
	
	<span class="parent_id" data-parent_id="3936995"></span>
	
	
	
		<div class="info  " rel="3938902">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3938902" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark positive ">
						<span class="score" title="Всего 2: ↑2 и ↓0">+2</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/Qbit/" class="avatar"><img src="./index_files/stub-user-small.gif" alt=""></a>
			<a href="http://habrahabr.ru/users/Qbit/" class="username">Qbit</a><span class="comma">,</span>
			<time>30 мая 2011 в 00:33</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3938902" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3938902" data-parent_id="3936995" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3936995" data-id="3938902" data-parent_id="3936995" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Не говоря уже о том, что в финализаторе нельзя обращаться к другим финализируемым объектам, так как порядок вызова финализаторов не определён: «Specifically, you must know that any code you call from within a Finalize method does not use any other object that could have already been finalized.»&nbsp;©&nbsp;Richter<br>
<br>
И вообще: «If you’re familiar with C++, you’ll notice that the special syntax C# requires for defining a Finalize method looks just like the syntax you’d use to define a C++ destructor. In fact, the C# Programming Language Specification calls this method a destructor. However, <b>a Finalize method doesn’t work like an unmanaged C++ destructor at all</b>, and this has caused a great deal of confusion for developers migrating from one language to another.<br>
The problem is that developers mistakenly believe that using the C# destructor syntax means that the type’s objects will be deterministically destructed, just as they would be in C++. However, the CLR doesn’t support deterministic destruction, preventing C# from providing this mechanism.»&nbsp;©&nbsp;Richter 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3938902">
	
	</div>
</div>

	
	</div>
</div>

	
	</div>
</div>

   
    
<div class="comment_item" id="comment_3936368">
	
	<span class="parent_id" data-parent_id="0"></span>
	
	
	
		<div class="info  " rel="3936368">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3936368" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark positive ">
						<span class="score" title="Всего 2: ↑2 и ↓0">+2</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/vercors/" class="avatar"><img src="./index_files/stub-user-small.gif" alt=""></a>
			<a href="http://habrahabr.ru/users/vercors/" class="username">vercors</a><span class="comma">,</span>
			<time>28 мая 2011 в 17:26</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3936368" class="link_to_comment">#</a>
			
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			А если сравнить ваш метод с асинхронными сокетами<br>
<a href="http://msdn.microsoft.com/en-us/library/fx6588te%28vs.80%29.aspx">msdn.microsoft.com/en-us/library/fx6588te%28vs.80%29.aspx</a><br>
где меньше будет потребление ресурсов?<br>
<br>
 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3936368">
	
	</div>
</div>

   
    
<div class="comment_item" id="comment_3936573">
	
	<span class="parent_id" data-parent_id="0"></span>
	
	
	
		<div class="info  " rel="3936573">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3936573" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark positive ">
						<span class="score" title="Всего 3: ↑2 и ↓1">+1</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/AirLight/" class="avatar"><img src="./index_files/small_21093.jpg" alt=""></a>
			<a href="http://habrahabr.ru/users/AirLight/" class="username">AirLight</a><span class="comma">,</span>
			<time>28 мая 2011 в 20:02</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3936573" class="link_to_comment">#</a>
			
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Можно уточнить что значит значок "~" перед именем Server? 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3936573">
	 
		
<div class="comment_item" id="comment_3936616">
	
	<span class="parent_id" data-parent_id="3936573"></span>
	
	
	
		<div class="info  " rel="3936616">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3936616" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark positive ">
						<span class="score" title="Всего 4: ↑3 и ↓1">+2</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/Dim0FF/" class="avatar"><img src="./index_files/small_24155.jpg" alt=""></a>
			<a href="http://habrahabr.ru/users/Dim0FF/" class="username">Dim0FF</a><span class="comma">,</span>
			<time>28 мая 2011 в 20:24</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3936616" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3936616" data-parent_id="3936573" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3936573" data-id="3936616" data-parent_id="3936573" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Это <a href="http://msdn.microsoft.com/ru-ru/library/66x5fx1b.aspx">деструктор</a>. 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3936616">
	
	</div>
</div>

	 
		
<div class="comment_item" id="comment_3936674">
	
	<span class="parent_id" data-parent_id="3936573"></span>
	
	
	
		<div class="info  " rel="3936674">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3936674" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark positive ">
						<span class="score" title="Всего 25: ↑21 и ↓4">+17</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/EvilBlueBeaver/" class="avatar"><img src="./index_files/stub-user-small.gif" alt=""></a>
			<a href="http://habrahabr.ru/users/EvilBlueBeaver/" class="username">EvilBlueBeaver</a><span class="comma">,</span>
			<time>28 мая 2011 в 21:10</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3936674" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3936674" data-parent_id="3936573" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3936573" data-id="3936674" data-parent_id="3936573" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Вот и выросло поколение людей, которые не знают, что такое "~"… 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3936674">
	 
		
<div class="comment_item" id="comment_3936727">
	
	<span class="parent_id" data-parent_id="3936674"></span>
	
	
	
		<div class="info  " rel="3936727">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3936727" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark positive ">
						<span class="score" title="Всего 2: ↑2 и ↓0">+2</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/FTM/" class="avatar"><img src="./index_files/stub-user-small.gif" alt=""></a>
			<a href="http://habrahabr.ru/users/FTM/" class="username">FTM</a><span class="comma">,</span>
			<time>28 мая 2011 в 21:42</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3936727" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3936727" data-parent_id="3936674" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3936674" data-id="3936727" data-parent_id="3936674" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Я никого не защищаю, конечно, стыдно не знать, что такое деструктор (хотя, если человек никогда не был связан с программированием, то почему бы и нет?), но, судя по профилям, это «поколение» вас старше на 5 лет.  
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3936727">
	 
		
<div class="comment_item" id="comment_3936810">
	
	<span class="parent_id" data-parent_id="3936727"></span>
	
	
	
		<div class="info  " rel="3936810">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3936810" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark positive ">
						<span class="score" title="Всего 5: ↑5 и ↓0">+5</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/jack128/" class="avatar"><img src="./index_files/stub-user-small.gif" alt=""></a>
			<a href="http://habrahabr.ru/users/jack128/" class="username">jack128</a><span class="comma">,</span>
			<time>28 мая 2011 в 22:30</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3936810" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3936810" data-parent_id="3936727" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3936727" data-id="3936810" data-parent_id="3936727" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Да и степень стыдобы в данном случае — вопрос обсуждаемый. В дот нете часто лучше не знать, что ~ — это деструктор.  
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3936810">
	
	</div>
</div>

	 
		
<div class="comment_item" id="comment_3936855">
	
	<span class="parent_id" data-parent_id="3936727"></span>
	
	
	
		<div class="info  " rel="3936855">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3936855" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark  ">
						<span class="score" title="Всего 2: ↑1 и ↓1">0</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/EvilBlueBeaver/" class="avatar"><img src="./index_files/stub-user-small.gif" alt=""></a>
			<a href="http://habrahabr.ru/users/EvilBlueBeaver/" class="username">EvilBlueBeaver</a><span class="comma">,</span>
			<time>28 мая 2011 в 22:56</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3936855" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3936855" data-parent_id="3936727" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3936727" data-id="3936855" data-parent_id="3936727" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Ну если человек не связан с программированием, то что он забыл в топике, где по сути кроме кода и нету ничего? А то, что на 5 лет старше, так это вдвойне грустно. 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3936855">
	
	</div>
</div>

	
	</div>
</div>

	
	</div>
</div>

	
	</div>
</div>

   
    
<div class="comment_item" id="comment_3936582">
	
	<span class="parent_id" data-parent_id="0"></span>
	
	
	
		<div class="info  " rel="3936582">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3936582" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark  ">
						<span class="score" title="Всего 0: ↑0 и ↓0">0</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/dkukushkin/" class="avatar"><img src="./index_files/stub-user-small.gif" alt=""></a>
			<a href="http://habrahabr.ru/users/dkukushkin/" class="username">dkukushkin</a><span class="comma">,</span>
			<time>28 мая 2011 в 20:09</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3936582" class="link_to_comment">#</a>
			
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Кому тема mini-серверов на .Net интересна, рекомендую посмотреть Cassini: <a href="http://en.wikipedia.org/wiki/Cassini_Web_Server">en.wikipedia.org/wiki/Cassini_Web_Server</a> Он не на много сложнее, но поддерживает ASP.Net (не только статика). 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3936582">
	
	</div>
</div>

   
    
<div class="comment_item" id="comment_3936599">
	
	<span class="parent_id" data-parent_id="0"></span>
	
	
	
		<div class="info  " rel="3936599">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3936599" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark positive ">
						<span class="score" title="Всего 2: ↑2 и ↓0">+2</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/kekekeks/" class="avatar"><img src="./index_files/small_23437.jpg" alt=""></a>
			<a href="http://habrahabr.ru/users/kekekeks/" class="username">kekekeks</a><span class="comma">,</span>
			<time>28 мая 2011 в 20:16</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3936599" class="link_to_comment">#</a>
			
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Вообще говоря многопоточные сервера — зло. Есть же дотнете асинхронщина для неблокирующей работы с сокетами. 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3936599">
	 
		
<div class="comment_item" id="comment_3937801">
	
	<span class="parent_id" data-parent_id="3936599"></span>
	
	
	
		<div class="info  " rel="3937801">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3937801" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark  negative">
						<span class="score" title="Всего 1: ↑0 и ↓1">–1</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/jakobz/" class="avatar"><img src="./index_files/small_13218.jpg" alt=""></a>
			<a href="http://habrahabr.ru/users/jakobz/" class="username">jakobz</a><span class="comma">,</span>
			<time>29 мая 2011 в 13:34</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3937801" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3937801" data-parent_id="3936599" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3936599" data-id="3937801" data-parent_id="3936599" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format bad bad1">
			Если делать простые вещи с упором на производительность — то да. Если что-то сложное — умаешься так писать. 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3937801">
	 
		
<div class="comment_item" id="comment_3938071">
	
	<span class="parent_id" data-parent_id="3937801"></span>
	
	
	
		<div class="info  " rel="3938071">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3938071" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark  ">
						<span class="score" title="Всего 0: ↑0 и ↓0">0</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/kekekeks/" class="avatar"><img src="./index_files/small_23437.jpg" alt=""></a>
			<a href="http://habrahabr.ru/users/kekekeks/" class="username">kekekeks</a><span class="comma">,</span>
			<time>29 мая 2011 в 15:59</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3938071" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3938071" data-parent_id="3937801" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3937801" data-id="3938071" data-parent_id="3937801" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Если вынести логику в схему «запрос-ответ» с сохранением состояний а ля сессия, а работу с пакетами перенести на отдельный уровень, то всё ок. Получаем событийную модель. 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3938071">
	 
		
<div class="comment_item" id="comment_3938259">
	
	<span class="parent_id" data-parent_id="3938071"></span>
	
	
	
		<div class="info  " rel="3938259">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3938259" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark  ">
						<span class="score" title="Всего 0: ↑0 и ↓0">0</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/jakobz/" class="avatar"><img src="./index_files/small_13218.jpg" alt=""></a>
			<a href="http://habrahabr.ru/users/jakobz/" class="username">jakobz</a><span class="comma">,</span>
			<time>29 мая 2011 в 17:47</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3938259" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3938259" data-parent_id="3938071" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3938071" data-id="3938259" data-parent_id="3938071" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Останутся еще обращения к базе и прочим файлам, которые блокируют. Через это придется программу разрезать на куски, пихать куда-то временный стейт и все такое. Такой режим в ASP.net, кстати, есть. Но что-то более-менее сложное писать на этом умаешься. 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3938259">
	 
		
<div class="comment_item" id="comment_3938478">
	
	<span class="parent_id" data-parent_id="3938259"></span>
	
	
	
		<div class="info  " rel="3938478">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3938478" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark positive ">
						<span class="score" title="Всего 1: ↑1 и ↓0">+1</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/kekekeks/" class="avatar"><img src="./index_files/small_23437.jpg" alt=""></a>
			<a href="http://habrahabr.ru/users/kekekeks/" class="username">kekekeks</a><span class="comma">,</span>
			<time>29 мая 2011 в 20:20</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3938478" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3938478" data-parent_id="3938259" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3938259" data-id="3938478" data-parent_id="3938259" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			С сишарповским-то синтаксисом замыканий? Наплодил колбэков и поехали. Тем более что сейчас соорудили ключевое слово async. 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3938478">
	
	</div>
</div>

	
	</div>
</div>

	
	</div>
</div>

	
	</div>
</div>

	
	</div>
</div>

   
    
<div class="comment_item" id="comment_3936827">
	
	<span class="parent_id" data-parent_id="0"></span>
	
	
	
		<div class="info  " rel="3936827">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3936827" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark positive ">
						<span class="score" title="Всего 5: ↑5 и ↓0">+5</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/int02h/" class="avatar"><img src="./index_files/small_24149.jpg" alt=""></a>
			<a href="http://habrahabr.ru/users/int02h/" class="username">int02h</a><span class="comma">,</span>
			<time>28 мая 2011 в 22:42</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3936827" class="link_to_comment">#</a>
			
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			С точки зрения программирования: делать в конструкторе бесконечный цикл и закладывать логику в деструктор (это акутально для .NET) как-то нехорошо, мне кажется. Даже в рамках демонстрационного примера. 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3936827">
	
	</div>
</div>

   
    
<div class="comment_item" id="comment_3937140">
	
	<span class="parent_id" data-parent_id="0"></span>
	
	
	
		<div class="info  " rel="3937140">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3937140" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark positive ">
						<span class="score" title="Всего 3: ↑3 и ↓0">+3</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/lair/" class="avatar"><img src="./index_files/stub-user-small.gif" alt=""></a>
			<a href="http://habrahabr.ru/users/lair/" class="username">lair</a><span class="comma">,</span>
			<time>29 мая 2011 в 01:36</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3937140" class="link_to_comment">#</a>
			
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Сам интересный для меня вопрос: а что такого специфически c#-ного тут?<br>
<br>
Это не «сервер на c#, это „сервер на clr“.<br>
<br>
Ну и да, выше правильно пишут, в нем столько ошибок, что на нем можно делать демонстрации „как не надо делать“. 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3937140">
	
	</div>
</div>

   
    
<div class="comment_item" id="comment_3937607">
	
	<span class="parent_id" data-parent_id="0"></span>
	
	
	
		<div class="info  " rel="3937607">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3937607" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark positive ">
						<span class="score" title="Всего 5: ↑5 и ↓0">+5</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/TWINc/" class="avatar"><img src="./index_files/small_12636.jpg" alt=""></a>
			<a href="http://habrahabr.ru/users/TWINc/" class="username">TWINc</a><span class="comma">,</span>
			<time>29 мая 2011 в 11:53</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3937607" class="link_to_comment">#</a>
			
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;В&nbsp;бесконечном&nbsp;цикле<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (true)<br>
</code><br>
<br>
писать комментарии хорошо, но такие абсолютно бесполезны.  
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3937607">
	
	</div>
</div>

   
    
<div class="comment_item" id="comment_3937641">
	
	<span class="parent_id" data-parent_id="0"></span>
	
	
	
		<div class="info  " rel="3937641">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3937641" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark  ">
						<span class="score" title="Всего 0: ↑0 и ↓0">0</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/mt_/" class="avatar"><img src="./index_files/stub-user-small.gif" alt=""></a>
			<a href="http://habrahabr.ru/users/mt_/" class="username">mt_</a><span class="comma">,</span>
			<time>29 мая 2011 в 12:18</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3937641" class="link_to_comment">#</a>
			
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Пул потоков надо делать изначально расширяемым. Лучше медленно обслужить все запросы, чем вообще не обслужить половину. 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3937641">
	 
		
<div class="comment_item" id="comment_3937794">
	
	<span class="parent_id" data-parent_id="3937641"></span>
	
	
	
		<div class="info  " rel="3937794">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3937794" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark  ">
						<span class="score" title="Всего 0: ↑0 и ↓0">0</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/jakobz/" class="avatar"><img src="./index_files/small_13218.jpg" alt=""></a>
			<a href="http://habrahabr.ru/users/jakobz/" class="username">jakobz</a><span class="comma">,</span>
			<time>29 мая 2011 в 13:32</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3937794" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3937794" data-parent_id="3937641" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3937641" data-id="3937794" data-parent_id="3937641" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Он расширяемый. Просто когда потоков больше лимита, они начинают создаваться не чаще чем раз в полсекунды вроде. Да и лимит там по-умолчанию вроде больше чем 8, что-то типа по 20 на ядро. 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3937794">
	
	</div>
</div>

	
	</div>
</div>

   
    
<div class="comment_item" id="comment_3937869">
	
	<span class="parent_id" data-parent_id="0"></span>
	
	
	
		<div class="info  " rel="3937869">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3937869" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark  ">
						<span class="score" title="Всего 0: ↑0 и ↓0">0</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/GraD_Kh/" class="avatar"><img src="./index_files/stub-user-small.gif" alt=""></a>
			<a href="http://habrahabr.ru/users/GraD_Kh/" class="username">GraD_Kh</a><span class="comma">,</span>
			<time>29 мая 2011 в 14:09</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3937869" class="link_to_comment">#</a>
			
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Называть локальные и приватные переменные с большой буквы — это некомильфо.<br>
Обращаться к управляемым объектам в деструкторе — просто нельзя.<br>
Если вы уже пишите комментарии, то для классов и методов лучше использовать xml-образные.<br>
Вы извините, если это выглядит как то, что я придираюсь, просто при написании коммерческого кода Вас за это могут больно пнуть. 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3937869">
	
	</div>
</div>

   
    
<div class="comment_item" id="comment_3937936">
	
	<span class="parent_id" data-parent_id="0"></span>
	
	
	
		<div class="info  " rel="3937936">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3937936" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark positive ">
						<span class="score" title="Всего 1: ↑1 и ↓0">+1</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/Enrey/" class="avatar"><img src="./index_files/small_24937.jpg" alt=""></a>
			<a href="http://habrahabr.ru/users/Enrey/" class="username">Enrey</a><span class="comma">,</span>
			<time>29 мая 2011 в 14:44</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3937936" class="link_to_comment">#</a>
			
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Ощущение, что статья устарела лет эдак на N.<br>
Какие деструкторы (IDisposable!), какой Thread.Start (TPL!)… 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3937936">
	
	</div>
</div>

   
    
<div class="comment_item" id="comment_3938030">
	
	<span class="parent_id" data-parent_id="0"></span>
	
	
	
		<div class="info  " rel="3938030">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3938030" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark  negative">
						<span class="score" title="Всего 4: ↑0 и ↓4">–4</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/nekt/" class="avatar"><img src="./index_files/small_2091.png" alt=""></a>
			<a href="http://habrahabr.ru/users/nekt/" class="username">nekt</a><span class="comma">,</span>
			<time>29 мая 2011 в 15:34</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3938030" class="link_to_comment">#</a>
			
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format bad bad4">
			Написать что ли статью «многопоточный веб-сервер на PHP»? :) 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3938030">
	
	</div>
</div>

   
    
<div class="comment_item" id="comment_3938430">
	
	<span class="parent_id" data-parent_id="0"></span>
	
	
	
		<div class="info  " rel="3938430">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3938430" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark  ">
						<span class="score" title="Всего 0: ↑0 и ↓0">0</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/Fduch/" class="avatar"><img src="./index_files/small_5690.jpg" alt=""></a>
			<a href="http://habrahabr.ru/users/Fduch/" class="username">Fduch</a><span class="comma">,</span>
			<time>29 мая 2011 в 19:48</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3938430" class="link_to_comment">#</a>
			
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			А почему Вы просто не воспользовались встроенным классом HttpListener? 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3938430">
	 
		
<div class="comment_item" id="comment_3938441">
	
	<span class="parent_id" data-parent_id="3938430"></span>
	
	
	
		<div class="info  " rel="3938441">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3938441" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark  ">
						<span class="score" title="Всего 0: ↑0 и ↓0">0</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/Fduch/" class="avatar"><img src="./index_files/small_5690.jpg" alt=""></a>
			<a href="http://habrahabr.ru/users/Fduch/" class="username">Fduch</a><span class="comma">,</span>
			<time>29 мая 2011 в 19:55</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3938441" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3938441" data-parent_id="3938430" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3938430" data-id="3938441" data-parent_id="3938430" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Пропустил первый абзац =( 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3938441">
	
	</div>
</div>

	
	</div>
</div>

   
    
<div class="comment_item" id="comment_3938913">
	
	<span class="parent_id" data-parent_id="0"></span>
	
	
	
		<div class="info  " rel="3938913">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3938913" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark positive ">
						<span class="score" title="Всего 1: ↑1 и ↓0">+1</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/stoune/" class="avatar"><img src="./index_files/small_7610.png" alt=""></a>
			<a href="http://habrahabr.ru/users/stoune/" class="username">stoune</a><span class="comma">,</span>
			<time>30 мая 2011 в 00:47</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3938913" class="link_to_comment">#</a>
			
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Как поделка для здачи преподу сгодится. А так нужно исспользовать WCF и не плодить велосипеды. 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3938913">
	
	</div>
</div>

   
    
<div class="comment_item" id="comment_3950951">
	
	<span class="parent_id" data-parent_id="0"></span>
	
	
	
		<div class="info  " rel="3950951">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3950951" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark  ">
						<span class="score" title="Всего 0: ↑0 и ↓0">0</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/Weageoo/" class="avatar"><img src="./index_files/small_24594.png" alt=""></a>
			<a href="http://habrahabr.ru/users/Weageoo/" class="username">Weageoo</a><span class="comma">,</span>
			<time> 2 июня 2011 в 18:25</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3950951" class="link_to_comment">#</a>
			
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Не люблю: 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3950951">
	 
		
<div class="comment_item" id="comment_3951048">
	
	<span class="parent_id" data-parent_id="3950951"></span>
	
	
	
		<div class="info  " rel="3951048">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3951048" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark  ">
						<span class="score" title="Всего 0: ↑0 и ↓0">0</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/Weageoo/" class="avatar"><img src="./index_files/small_24594.png" alt=""></a>
			<a href="http://habrahabr.ru/users/Weageoo/" class="username">Weageoo</a><span class="comma">,</span>
			<time> 2 июня 2011 в 18:47</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3951048" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3951048" data-parent_id="3950951" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3950951" data-id="3951048" data-parent_id="3950951" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			 — конкатенацию при помощи "+";<br>
 — магические числа в коде (даже степени двойки);<br>
 — "", когда надо писать string.Empty (или ничего не писать, если объявление, всё равно инициализация по умолчанию); <br>
<br>
Люблю:<br>
 — следовать общепринятым стандартам наименования;<br>
 — использовать Path для конкатенации путей;<br>
 — использовать var<br>
 — использовать using, чтобы не забыть закрыть stream<br>
<br>
Сугубо ихмо. Ну а статья в целом познавательна для незнакомых с темой. 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3951048">
	 
		
<div class="comment_item" id="comment_3956582">
	
	<span class="parent_id" data-parent_id="3951048"></span>
	
	
	
		<div class="info  " rel="3956582">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3956582" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark  ">
						<span class="score" title="Всего 0: ↑0 и ↓0">0</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/lair/" class="avatar"><img src="./index_files/stub-user-small.gif" alt=""></a>
			<a href="http://habrahabr.ru/users/lair/" class="username">lair</a><span class="comma">,</span>
			<time> 4 июня 2011 в 22:25</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3956582" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3956582" data-parent_id="3951048" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3951048" data-id="3956582" data-parent_id="3951048" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			С каких это пор default(string) == string.Empty? Всегда null было. 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3956582">
	 
		
<div class="comment_item" id="comment_3956727">
	
	<span class="parent_id" data-parent_id="3956582"></span>
	
	
	
		<div class="info  " rel="3956727">
			<div class="folding-dot-holder"><div class="folding-dot"></div></div>
			
			<div id="voting_3956727" class="voting   ">
										
				
					<span class="minus" title="Голосовать могут только зарегистрированные пользователи"></span>
					<span class="plus" title="Голосовать могут только зарегистрированные пользователи"></span>
				
				<div class="mark  ">
						<span class="score" title="Всего 0: ↑0 и ↓0">0</span> 
				</div>	 
			</div>
			
			<a href="http://habrahabr.ru/users/Weageoo/" class="avatar"><img src="./index_files/small_24594.png" alt=""></a>
			<a href="http://habrahabr.ru/users/Weageoo/" class="username">Weageoo</a><span class="comma">,</span>
			<time> 4 июня 2011 в 23:58</time>
			
			<a href="http://habrahabr.ru/post/120157/#comment_3956727" class="link_to_comment">#</a>
			
			
				<div class="show_tree" data-id="3956727" data-parent_id="3956582" title="Показать ветку комментариев">↵</div>
				
				<a href="http://habrahabr.ru/post/120157/#comment_3956582" data-id="3956727" data-parent_id="3956582" class="to_parent">↑</a>
			
			<span class="to_chidren"></span>
			<div class="clear"></div>
		</div>
		<div class="message html_format ">
			Не равно, конечно. Присваивать в начале string.Empty или нет нужно в зависимости от того, как дальше будет использоваться переменная. 
		</div>
		<div class="reply">
			
		</div>
	
	<div class="reply_comments" id="reply_comments_3956727">
	
	</div>
</div>

	
	</div>
</div>

	
	</div>
</div>

	
	</div>
</div>

  
</div>

	
	
		
			<p class="for_users_only_msg">Только зарегистрированные пользователи могут оставлять комментарии. <a href="http://habrahabr.ru/login/">Войдите</a>, пожалуйста.</p>
		
		
	



	
<form action="http://habrahabr.ru/json/favorites/" method="post" id="edit_tags_form" class="hidden">
  <input type="hidden" name="action" value="add">
  <input type="hidden" name="ti" value="0">
  <input type="hidden" name="tt" value="0">
  <label>Пометьте топик понятными вам метками, если хотите</label>
  <input type="text" name="tags_string" class="tags_string" autocomplete="off" style="">
  <div class="description">Метки лучше разделять запятой. Например: <i>общение, социальные сети, myspace.com, подростки, мердок</i></div>
  <input type="submit" value="Сохранить" class="submit"> или <a href="http://habrahabr.ru/post/120157/#" class="close" onclick="return close_edit_tags()">закрыть</a>
</form>
    


  </div>
  <div class="sidebar_right">
	
		




	<div class="banner_240x400">

		<script type="text/javascript">
			(function(){
				var custom = [];
			/* custom params */
			
				custom[1]	= 'net';
			
				

			/* end of custom params */
				custom.getStd = function(){for(var i=0,j,s=[];i<this.length;i++){if(this[i])s.push((!j?(j=1,i+'='):'')+escape(this[i]));else j=0}return s.length?'&custom='+s.join(';'):''};

				var RndNum4NoCash = Math.round(Math.random() * 1000000000),
					ar_Tail = escape(document.referrer || 'unknown');
				document.write('<iframe src="http://ad.adriver.ru/cgi-bin/erle.cgi?'
					+ 'sid=176776&target=top&bt=22&pz=0&rnd=' + RndNum4NoCash + '&tail256=' + ar_Tail + custom.getStd()
					+ '" frameborder=0 vspace=0 hspace=0 width=240 height=400 marginwidth=0'
					+ ' marginheight=0 scrolling=no></iframe>');
			})();
		</script><iframe src="./index_files/erle.htm" frameborder="0" vspace="0" hspace="0" width="240" height="400" marginwidth="0" marginheight="0" scrolling="no"></iframe>

	</div>





		
	<div id="facebook_reader_wrapper">
		<div id="facebook_reader" class="block" style="display: block;">           <div class="connect">             <div class="button"><div class="fb-login-button fb_iframe_widget" data-show-faces="false" data-width="200" data-max-rows="1" data-scope="publish_actions" login_text="" fb-xfbml-state="rendered"><span style="width: 68px; height: 22px;"><iframe id="f34f6be474" name="f36df9a84c" scrolling="no" style="border: none; overflow: hidden; height: 22px; width: 68px;" src="./index_files/login_button.htm" class=""></iframe></span></div></div>             <div class="text">Делитесь прочитанными статьями с вашими друзьями в Facebook <a href="https://www.facebook.com/about/timeline/apps"><img class="help-tip tip_top" title="Что это?" src="./index_files/bg_cicle_help.png"></a></div>             <div class="loading_text">Загрузка...</div>           </div>         </div>
	</div>

		

<div class="block daily_best_posts">
  <div class="title">Лучшее <sup>за 24 часа</sup></div>
  <div class="posts_list">
    
      <div class="post_item">
        
				
				
				
				
				

        <a href="http://habrahabr.ru/post/160251/" class="post_name">Квадрокоптер дополненной реальности — обзор AR.Drone 2.0</a>
      </div>
    
      <div class="post_item">
        
				
				
				
				
				

        <a href="http://habrahabr.ru/post/160689/" class="post_name">Оцифровка 35мм фотопленки</a>
      </div>
    
      <div class="post_item">
        
				
				
				
				
				

        <a href="http://habrahabr.ru/post/160727/" class="post_name">Роботизированный бас на Atmel ATMega328 и Arduino IDE</a>
      </div>
    
      <div class="post_item">
        
				
				
				
				
				

        <a href="http://habrahabr.ru/post/160687/" class="post_name">Виды и форматы справок</a>
      </div>
    
      <div class="post_item">
        
				
				
				
				
				

        <a href="http://habrahabr.ru/post/160723/" class="post_name">Полезные штуки для iOS-разработчика #2</a>
      </div>
    
      <div class="post_item">
        
				
				
				
				
				

        <a href="http://habrahabr.ru/post/160649/" class="post_name">Несколько дополнительных мыслей о будущем ИТ на 2012-17 гг</a>
      </div>
    
      <div class="post_item">
        
				
				
				
				
				

        <a href="http://habrahabr.ru/post/160707/" class="post_name">Яндекс.Музыка в новой обработке</a>
      </div>
    
      <div class="post_item">
        
				
				
				
				
				

        <a href="http://habrahabr.ru/post/160635/" class="post_name">Государственная итоговая аттестация в школах – не все как у ЕГЭ</a>
      </div>
    
      <div class="post_item">
        
				
				
				
				
				

        <a href="http://habrahabr.ru/post/160719/" class="post_name">Winulator: запуск игр 90-х на Android OS</a>
      </div>
    
      <div class="post_item">
        
				
				
				
				
				

        <a href="http://habrahabr.ru/post/160733/" class="post_name">Cisco UCS unboxing</a>
      </div>
    
  </div>
  <div class="all"><a href="http://habrahabr.ru/top/">все лучшие</a></div>
</div>

		
		



<div class="block similar_posts">

	<div class="title">Похожие посты</div>
  <div class="posts_list">
  	
    	<div class="post_item">
    				<a class="post_name" href="http://habrahabr.ru/post/159757/">Новый руткит против серверов на Linux</a>
    				<span class="when">22.11.2012</span>
      </div>
  	
    	<div class="post_item">
    				<a class="post_name" href="http://habrahabr.ru/post/159715/">Р. Курцвейл – Как создать разум (“How to create a mind”). Краткий обзор книги</a>
    				<span class="when">22.11.2012</span>
      </div>
  	
    	<div class="post_item">
    				<a class="post_name" href="http://habrahabr.ru/post/159477/">how to: Как и зачем работать с svn через git</a>
    				<span class="when">20.11.2012</span>
      </div>
  	
    	<div class="post_item">
    				<a class="post_name" href="http://habrahabr.ru/post/158449/">Электронная система управления подвеской горного велосипеда</a>
    				<span class="when">15.11.2012</span>
      </div>
  	
    	<div class="post_item">
    				<a class="post_name" href="http://habrahabr.ru/post/139165/">How to / Установка Zabbix-server (FreeBSD, PostgreSQL, Nginx)</a>
    				<span class="when">12.03.2012</span>
      </div>
  	
    	<div class="post_item">
    				<a class="post_name" href="http://habrahabr.ru/post/129861/">Событийно-ориентированный HTTP-сервер на C# с помощью Rx и HttpListener</a>
    				<span class="when">06.10.2011</span>
      </div>
  	
    	<div class="post_item">
    				<a class="post_name" href="http://habrahabr.ru/post/126083/">Оптимизация HTTP-сервера через версионность ресурсов. Особенности реализации</a>
    				<span class="when">11.08.2011</span>
      </div>
  	
    	<div class="post_item">
    				<a class="post_name" href="http://habrahabr.ru/post/102258/">Введение в Nitrode — выделенный HTTP-сервер</a>
    				<span class="when">20.08.2010</span>
      </div>
  	
    	<div class="post_item">
    				<a class="post_name" href="http://habrahabr.ru/post/69136/">HTTP сервер за 15 минут</a>
    				<span class="when">09.09.2009</span>
      </div>
  	
    	<div class="post_item">
    				<a class="post_name" href="http://habrahabr.ru/post/37245/">HTTP сервер на bash</a>
    				<span class="when">17.08.2008</span>
      </div>
  	
  </div>			
</div>




		
		


<div class="block live_broadcast">
  <div class="title">Прямой эфир &nbsp;<sup><span class="dotted tab open" data-type="live_broadcast_activity">посты</span> 
  																									 &nbsp;<span class="dotted tab " data-type="qa_activity">q&amp;a</span></sup></div>
  
  <div class="live_broadcast_activity ">
		
		  <div class="posts_list">
				
				    <div class="post_item">
				      <a href="http://habrahabr.ru/users/Ariman/" class="user_name">Ariman</a> →
				      <a href="http://habrahabr.ru/post/160745/#comment_5515705" class="post_name">Freescale i.MX6</a>&nbsp;<span class="count">11</span>
				    </div>
				
				    <div class="post_item">
				      <a href="http://habrahabr.ru/users/nefelim4ag/" class="user_name">nefelim4ag</a> →
				      <a href="http://habrahabr.ru/post/160691/#comment_5515703" class="post_name">«Отказоустойчивая» система на базе Ubuntu и btrfs</a>&nbsp;<span class="count">21</span>
				    </div>
				
				    <div class="post_item">
				      <a href="http://habrahabr.ru/users/degorov/" class="user_name">degorov</a> →
				      <a href="http://habrahabr.ru/post/160763/#comment_5515701" class="post_name">iTunes 11 наконец-то стал доступен для загрузки</a>&nbsp;<span class="count">19</span>
				    </div>
				
				    <div class="post_item">
				      <a href="http://habrahabr.ru/users/DIHALT/" class="user_name">DIHALT</a> →
				      <a href="http://habrahabr.ru/post/160751/#comment_5515699" class="post_name">Яндекс-деньги стали проводить часть интернет-платежей по пластиковой карте ЯД как снятие в банкомате</a>&nbsp;<span class="count">35</span>
				    </div>
				
				    <div class="post_item">
				      <a href="http://habrahabr.ru/users/DivERmaK/" class="user_name">DivERmaK</a> →
				      <a href="http://habrahabr.ru/post/160739/#comment_5515693" class="post_name">Использование WinAPI на Surface</a>&nbsp;<span class="count">32</span>
				    </div>
				
				    <div class="post_item">
				      <a href="http://habrahabr.ru/users/nmike/" class="user_name">nmike</a> →
				      <a href="http://habrahabr.ru/post/160759/#comment_5515691" class="post_name">Hetzner может неожиданно отключить ваш сервер</a>&nbsp;<span class="count">36</span>
				    </div>
				
				    <div class="post_item">
				      <a href="http://habrahabr.ru/users/AlexSane/" class="user_name">AlexSane</a> →
				      <a href="http://habrahabr.ru/post/160757/#comment_5515687" class="post_name">В Сирии отключили Интернет</a>&nbsp;<span class="count">22</span>
				    </div>
				
				    <div class="post_item">
				      <a href="http://habrahabr.ru/users/AmdY/" class="user_name">AmdY</a> →
				      <a href="http://habrahabr.ru/post/160711/#comment_5515685" class="post_name">Язык vs инструмент</a>&nbsp;<span class="count">10</span>
				    </div>
				
				    <div class="post_item">
				      <a href="http://habrahabr.ru/users/Neznaikos/" class="user_name">Neznaikos</a> →
				      <a href="http://habrahabr.ru/post/160693/#comment_5515683" class="post_name">Как снизить риски взаимодействия с клиентами в три этапа</a>&nbsp;<span class="count">11</span>
				    </div>
				
				    <div class="post_item">
				      <a href="http://habrahabr.ru/users/RussianNeuroMancer/" class="user_name">RussianNeuroMancer</a> →
				      <a href="http://habrahabr.ru/post/160055/#comment_5515679" class="post_name">7 лет спустя. Linux еще не совсем готов для домашнего пользования</a>&nbsp;<span class="count">928</span>
				    </div>
				
		  </div>
		  <div class="all"><a href="http://habrahabr.ru/posts/">все посты</a></div>
		
	</div>
	  
	<div class="qa_activity hidden">
		
			
		
		
		
		
			  <div class="posts_list">
					
					    <div class="post_item">
					      <a href="http://habrahabr.ru/users/KiLEX/" class="user_name">KiLEX</a> →
					      <a href="http://habrahabr.ru/qa/29489/#comment_142915" class="post_name">Посоветуйте CDN на 400Тб/мес (кроме амазона)</a>&nbsp;<span class="count">1</span>
					    </div>
					
					    <div class="post_item">
					      <a href="http://habrahabr.ru/users/rOOse/" class="user_name">rOOse</a> →
					      <a href="http://habrahabr.ru/qa/29471/#answer_117417" class="post_name">Кросс-браузерный онлайн сервис закладок?</a>&nbsp;<span class="count">4</span>
					    </div>
					
					    <div class="post_item">
					      <a href="http://habrahabr.ru/users/RadioAgent/" class="user_name">RadioAgent</a> →
					      <a href="http://habrahabr.ru/qa/29453/#comment_142913" class="post_name">Подскажите литературу про оценку ПО с помощью статистики от техподдержки</a>&nbsp;<span class="count">1</span>
					    </div>
					
					    <div class="post_item">
					      <a href="http://habrahabr.ru/users/namespace/" class="user_name">namespace</a> →
					      <a href="http://habrahabr.ru/qa/29451/#answer_117413" class="post_name">Олимпиадные задачи или «Сканави» по программированию</a>&nbsp;<span class="count">4</span>
					    </div>
					
					    <div class="post_item">
					      <a href="http://habrahabr.ru/users/eugenius_nsk/" class="user_name">eugenius_nsk</a> →
					      <a href="http://habrahabr.ru/qa/28445/#comment_142911" class="post_name">Какую СУБД посоветуете при работе с древовидными структурами данных?</a>&nbsp;<span class="count">5</span>
					    </div>
					
					    <div class="post_item">
					      <a href="http://habrahabr.ru/users/Graube/" class="user_name">Graube</a> →
					      <a href="http://habrahabr.ru/qa/29389/#comment_142909" class="post_name">Синхронизация Nokia E61 c outlook.com посредством Mail for Exchange (или иначе)</a>&nbsp;<span class="count">2</span>
					    </div>
					
					    <div class="post_item">
					      <a href="http://habrahabr.ru/users/igoravr/" class="user_name">igoravr</a> →
					      <a href="http://habrahabr.ru/qa/29487/#answer_117411" class="post_name">Лучший Javascript-фреймворк</a>&nbsp;<span class="count">1</span>
					    </div>
					
					    <div class="post_item">
					      <a href="http://habrahabr.ru/users/KiLEX/" class="user_name">KiLEX</a> →
					      <a href="http://habrahabr.ru/qa/19576/#comment_142907" class="post_name">Необходим хостинг для статики (100Тб/мес)</a>&nbsp;<span class="count">8</span>
					    </div>
					
					    <div class="post_item">
					      <a href="http://habrahabr.ru/users/fear86/" class="user_name">fear86</a> →
					      <a href="http://habrahabr.ru/qa/29395/#comment_142905" class="post_name">Кластерная файловая системы для Windows и Linux</a>&nbsp;<span class="count">5</span>
					    </div>
					
					    <div class="post_item">
					      <a href="http://habrahabr.ru/users/becks/" class="user_name">becks</a> →
					      <a href="http://habrahabr.ru/qa/29465/#answer_117407" class="post_name">Open source инструменты для анализа и структурирования текста</a>&nbsp;<span class="count">2</span>
					    </div>
					
			  </div>
			  <div class="all"><a href="http://habrahabr.ru/qa/">все вопросы</a></div>
		
	</div>  
</div>


<script type="text/javascript">
	$(document).ready(function(){
		$('.live_broadcast .tab').click(function(){
			$('.live_broadcast .tab').removeClass('open')
			$(this).addClass('open')
			
			$('.live_broadcast_activity').hide()
			$('.qa_activity').hide()
			
			$('.' + $(this).data('type')).show();
			
		})
	})
</script>



  
		
<style>
	/**
	 * tpl/posts/_sidebar/htmlblock/_intel2.tpl
	 *
	 * Стили для HTML_блока "intel2_htmlblock"
	 */
	.sidebar_right .block.intel2_htmlblock{background: #F0F0E7;text-align: left;position: relative;}
	.sidebar_right .block.intel2_htmlblock .logo{width:108px;height:72px;margin-bottom:10px;background: url(/images/sidebar/htmlblock/intel2/logo.png) no-repeat left top;}
	.sidebar_right .block.intel2_htmlblock .title{color:#015ea4;padding-top:10px;font-size:13px;}
	.sidebar_right .block.intel2_htmlblock .line{height:1px;background: #f5f6ef;border-bottom: 1px solid #e5e6dc;}	
	.sidebar_right .block.intel2_htmlblock ul{}
	.sidebar_right .block.intel2_htmlblock ul li{background: url(/images/sidebar/htmlblock/intel2/dot.png) no-repeat left center;color:#0d0d0d;font-size: 13px;padding-left:20px;margin-bottom:20px; }
	
	.sidebar_right .block.intel2_htmlblock .subtitle{color:#0079be;font-size:14px;padding-bottom:20px;}
	
	.sidebar_right .block.intel2_htmlblock .bottom_buttons .more{background: url(/images/sidebar/htmlblock/intel2/button.png) no-repeat left top;width:184px;height:38px;display: inline-block;}
	.sidebar_right .block.intel2_htmlblock .bottom_buttons{border-top:1px dashed #bdbcb5;background: #e6e7dc;text-align: center;
    	-webkit-border-bottom-right-radius: 5px;
    -webkit-border-bottom-left-radius: 5px;
    -moz-border-radius-bottomright: 5px;
    -moz-border-radius-bottomleft: 5px;
    border-bottom-right-radius: 5px;
    border-bottom-left-radius: 5px;
    margin:0px -20px -15px;
    padding:10px 20px;}
</style>
        


<div class="block intel2_htmlblock hidden">
	<div class="logo"></div>
	<div class="line"></div>	
	<div class="title">Intel обновляет флагманские продукты:</div>
	<ul>
		<li>Intel Parallel Studio XE 2013</li>
		<li>Intel Cluster Studio XE 2013</li>
	</ul>
	<div class="line"></div>
	<div class="bottom_buttons">
		<a href="" class="block_url more"></a>
	</div>


</div>

<style>
	.sidebar_right .block.domru_htmlblock{background: #F0F0E7;text-align: left;position: relative;}
	.sidebar_right .block.domru_htmlblock .logo{width:251px;height:87px;background: url(/images/sidebar/htmlblock/domru/logo.png) no-repeat left top;margin-bottom: 10px;}
	.sidebar_right .block.domru_htmlblock .line{height:1px;background: #f5f6ef;border-bottom: 1px solid #e5e6dc;}	
	.sidebar_right .block.domru_htmlblock .title{color:#000000;font-size:18px;font-weight:normal;margin: 10px 15px;text-transform: uppercase;}
	.sidebar_right .block.domru_htmlblock ul{color:#0d0d0d;font-size:13px;padding-bottom:10px;padding-top:10px;}
	.sidebar_right .block.domru_htmlblock ul li{margin-bottom: 10px;background: url(/images/sidebar/htmlblock/domru/dot.png) no-repeat 0px 7px;padding-left:15px;}
	.sidebar_right .block.domru_htmlblock .bottom_buttons .more{background: url(/images/sidebar/htmlblock/domru/button.png) no-repeat left top;width:163px;height:51px;display: inline-block;}
	.sidebar_right .block.domru_htmlblock .bottom_buttons{border-top:1px dashed #bdbcb5;background: #e6e7dc;text-align: center;
    	-webkit-border-bottom-right-radius: 5px;
    -webkit-border-bottom-left-radius: 5px;
    -moz-border-radius-bottomright: 5px;
    -moz-border-radius-bottomleft: 5px;
    border-bottom-right-radius: 5px;
    border-bottom-left-radius: 5px;
    margin:0px -20px -15px;
    padding:10px 20px;}
</style>
        


<div class="block domru_htmlblock hidden ">
	<div class="logo"></div>
	<div class="line"></div>
	<div class="title">Wi-Fi Hot Sport</div>
	<div class="line"></div>
	<ul>
		<li>Беспроводной интернет
		от 3 000 руб./мес.</li>
		<li>Скорость доступа внутри сети
		до 2 Мбит/с</li>
		<li>Круглосуточная техподдержка</li>
	</ul>
	<div class="bottom_buttons">
		<a href="" class="block_url more"></a>
	</div>
</div>

<style>
	.sidebar_right .block.seopult_htmlblock{background: #F0F0E7;text-align: left;position: relative;}
	.sidebar_right .block.seopult_htmlblock .logo{width:101px;height:23px;background: url(/images/sidebar/htmlblock/seopult/logo.png) no-repeat left top;margin-bottom:20px;}
	.sidebar_right .block.seopult_htmlblock .title{color:#404040;font-size:13px;font-weight:bold;margin-bottom:0;}
	.sidebar_right .block.seopult_htmlblock .text{color:#565656;padding-top:14px;font-size:13px;margin-bottom:10px;}	
	.sidebar_right .block.seopult_htmlblock ul{margin-bottom:20px;}
	.sidebar_right .block.seopult_htmlblock ul li{margin-bottom:15px;color:#5d7f95;font-size: 13px;font-style: italic;}	
	.sidebar_right .block.seopult_htmlblock ul li .num{display: inline-block;font-size: 16px;width:27px;height:27px;line-height: 27px;color:#fff;background: #82a6c0;text-align: center;margin-right:15px;}
	.sidebar_right .block.seopult_htmlblock .bottom_buttons .more{background: url(/images/sidebar/htmlblock/seopult/button.png) no-repeat left top;width:172px;height:36px;display: inline-block;}
	.sidebar_right .block.seopult_htmlblock .bottom_buttons{border-top:1px dashed #bdbcb5;background: #e6e7dc;text-align: center;
    	-webkit-border-bottom-right-radius: 5px;
    -webkit-border-bottom-left-radius: 5px;
    -moz-border-radius-bottomright: 5px;
    -moz-border-radius-bottomleft: 5px;
    border-bottom-right-radius: 5px;
    border-bottom-left-radius: 5px;
    margin:0px -20px -15px;
    padding:10px 20px;margin-top:20px;}
</style>
        


<div class="block seopult_htmlblock hidden">
	<div class="logo"></div>
	<div class="title">Автоматизированное продвижение сайтов</div>
	<div class="text">
		Более 200 000 сайтов выбрали SeoPult. Более 70% продвигаемых запросов стабильно стоят в ТОП10 Яндекса
	</div>
	<ul>
		<li><span class="num">1</span>50% экономии на ссылках</li>
		<li><span class="num">2</span>Запуск проекта за 10 минут</li>
		<li><span class="num">3</span>Вывод и удержание в ТОП 10</li>
	</ul>
	<div class="bottom_buttons">
		<a href="" class="block_url more"></a>
	</div>
</div>




<script type="text/javascript">
function show_html_block(name, url){
	if( typeof(name) !== 'undefined'){
		if( $('.'+name+'_htmlblock').size() > 0) {
			$('.'+name+'_htmlblock').show();
		}
	}
	if( typeof(url) !== 'undefined'){
		$('.'+name+'_htmlblock .block_url').attr('href', url);
	}
	
}
</script>


<!--  AdRiver code START. Type:AjaxJS Site: SP SZ: html PZ: 0 BN: 2 -->

<div id="adriver_banner_327292689" title=""></div>

<script type="text/javascript">
new adriver("adriver_banner_327292689", {sid:179440, bt:52, sz:'html', bn:2});
</script>

<!--  AdRiver code END  -->






   
		

<div class="block best_company">

		<div class="title">Компания дня <img src="./index_files/bg_cicle_help.png" class="help-tip"></div>

		<div class="company_info">
			<div class="name">
			 <img class="favicon" src="./index_files/stub-company-small.gif" alt="centos-admin.ru" height="16" width="16">
			 <div class="company_name"><a href="http://habrahabr.ru/company/centosadmin/" class="title">centos-admin.ru</a></div>
			</div>

			<p>Последний пост:
				<a href="http://habrahabr.ru/company/centosadmin/blog/160457/">Плагин оповещения по SMS о критичных задачах для Redmine</a>
			</p>

			<div class="buttons">
  			<div id="fans_count">50 подписчиков</div>
  			
			</div>
		</div>

	</div>


		

		

<div class="block new_vacanies">
  <a href="http://hantim.ru/" class="title">Хантим</a>
  <div class="vacancies">
		
		<div class="job_item ">
			<a href="http://hantim.ru/jobs/11218-veb-razrabotchik-php-udalenno">Веб-разработчик php (удаленно)</a>
		</div>
		
		<div class="job_item ">
			<a href="http://hantim.ru/jobs/10991-php-programmist">PHP-программист</a>
		</div>
		
		<div class="job_item ">
			<a href="http://hantim.ru/jobs/10953-php-programmist">PHP программист</a>
		</div>
		
		<div class="job_item ">
			<a href="http://hantim.ru/jobs/11664-programmist-perl">Программист Perl</a>
		</div>
		
		<div class="job_item ">
			<a href="http://hantim.ru/jobs/11405-veb-programmist">Веб-программист</a>
		</div>
		
		<div class="job_item ">
			<a href="http://hantim.ru/jobs/11252-php-backend-developer">PHP Backend developer</a>
		</div>
		
		<div class="job_item ">
			<a href="http://hantim.ru/jobs/11924-php-developer-senior">PHP Developer (Senior)</a>
		</div>
		
		<div class="job_item ">
			<a href="http://hantim.ru/jobs/8256-java-razrabotchik">Java разработчик</a>
		</div>
		
		<div class="job_item marked">
			<a href="http://hantim.ru/jobs/9800-opytnyy-php-razrabotchik">Опытный PHP-разработчик</a>
		</div>
		
		<div class="job_item ">
			<a href="http://hantim.ru/jobs/11378-scala-play-developer">Scala (Play) developer</a>
		</div>
		
  </div>
  <div class="all"><a href="http://hantim.ru/">все вакансии</a></div>

	</div>

		

	<div class="block freelansim">
	  <a href="http://freelansim.ru/" class="title"></a>
	  <div class="tasks">
			
				<div class="task ">
					<a href="http://freelansim.ru/tasks/4724">Написание прокси-сервиса</a>
				</div>
			
				<div class="task ">
					<a href="http://freelansim.ru/tasks/4532">Натяжка нового дизайна и добавление нового функционала в интернет-магазин на битриксе</a>
				</div>
			
				<div class="task ">
					<a href="http://freelansim.ru/tasks/4720">Обновить WSS 3.0 до Sharepoint Foundation 2010</a>
				</div>
			
				<div class="task ">
					<a href="http://freelansim.ru/tasks/4716">программист ASP.NET</a>
				</div>
			
				<div class="task ">
					<a href="http://freelansim.ru/tasks/4714">фраза для ролика Java</a>
				</div>
			
				<div class="task ">
					<a href="http://freelansim.ru/tasks/4712">Нужен программист на ЦМС 1С Битрикс.</a>
				</div>
			
				<div class="task ">
					<a href="http://freelansim.ru/tasks/4710">Сверстать макет из PSD в html+css+js</a>
				</div>
			
				<div class="task ">
					<a href="http://freelansim.ru/tasks/4702">Смена номера телефона на сайте в завимимости от реферальной ссылки</a>
				</div>
			
				<div class="task ">
					<a href="http://freelansim.ru/tasks/4698">Калькулятор стоимости 3д печати для Wordpress</a>
				</div>
			
				<div class="task ">
					<a href="http://freelansim.ru/tasks/4696">Озвучивание социального ролика для школьного проекта</a>
				</div>
			

	  </div>
	  <div class="all"><a href="http://freelansim.ru/tasks">все заказы</a></div>
	</div>


		
		

		


<div class="block similar_events">
	<div class="title">Ближайшие события</div>
		<div class="events_items">
			
				<div class="event_item">
					
						<div class="date">
						<div class="dayname dayname_5"></div>
						<div class="day">30</div>
						<div class="month">ноя</div>
						</div>
					
					<div class="title">
						<a href="http://habrahabr.ru/events/946/">Конференция "Software Quality Assurance Days-12"</a>
					</div>
				</div>
			
				<div class="event_item">
					
						<div class="date">
						<div class="dayname dayname_5"></div>
						<div class="day">30</div>
						<div class="month">ноя</div>
						</div>
					
					<div class="title">
						<a href="http://habrahabr.ru/events/1419/">Вебинар Fujitsu «Конкурентные преимущества блейд-серверов Fujitsu PRIMERGY»</a>
					</div>
				</div>
			
				<div class="event_item">
					
						<div class="date">
						<div class="dayname dayname_5"></div>
						<div class="day">30</div>
						<div class="month">ноя</div>
						</div>
					
					<div class="title">
						<a href="http://habrahabr.ru/events/1349/">Межвузовская олимпиада КРОК</a>
					</div>
				</div>
			
				<div class="event_item">
					
						<div class="date">
						<div class="dayname dayname_5"></div>
						<div class="day">30</div>
						<div class="month">ноя</div>
						</div>
					
					<div class="title">
						<a href="http://habrahabr.ru/events/1457/">Семинар по информационной безопасности от ESET</a>
					</div>
				</div>
			
				<div class="event_item">
					
						<div class="date">
						<div class="dayname dayname_5"></div>
						<div class="day">30</div>
						<div class="month">ноя</div>
						</div>
					
					<div class="title">
						<a href="http://habrahabr.ru/events/1401/">CocoaHeads. Ежемесячные встречи iOS/OS X разработчиков</a>
					</div>
				</div>
			
		</div>
	<div class="all"><a href="http://habrahabr.ru/events/">все события</a></div>
</div>


		
	
  </div>
  <div class="clear"></div>

			
	
	
	<div class="rotated_posts">
		
			<div class="rotated_post ">
				<a href="http://habrahabr.ru/post/148520/" class="grey">Программист-гуманитарий</a>
			</div>
		
			<div class="rotated_post ">
				<a href="http://habrahabr.ru/post/157801/" class="grey">Четыре африканские девочки изобрели генератор, работающий на моче</a>
			</div>
		
			<div class="rotated_post last">
				<a href="http://habrahabr.ru/post/159717/" class="grey">Новые подробности о шифре Copiale 18 века</a>
			</div>
		
	</div>
	

		  <div id="footer">
      
			
			<dl>
				<dd><a href="http://habrahabr.ru/login/">Войти</a></dd>
				<dd><a href="http://habrahabr.ru/register/">Регистрация</a></dd>
			</dl>
			
			<dl>
				<dt>Разделы</dt>

				<dd><a href="http://habrahabr.ru/qa/">Q&amp;A</a></dd>
				<dd><a href="http://habrahabr.ru/hubs/">Хабы</a></dd>
				<dd><a href="http://habrahabr.ru/events/">События</a></dd>
				<dd><a href="http://habrahabr.ru/companies/">Компании</a></dd>
				<dd><a href="http://habrahabr.ru/job/">Работа</a></dd>
				<dd><a href="http://habrahabr.ru/users/">Пользователи</a></dd>
			</dl>
			<dl>
				<dt>Посты</dt>
				
				<dd><a href="http://habrahabr.ru/posts/top/">Лучшие</a></dd>
				<dd><a href="http://habrahabr.ru/posts/collective/">Тематические</a></dd>
				<dd><a href="http://habrahabr.ru/posts/corporative/">Корпоративные</a></dd>
				<dd><a href="http://habrahabr.ru/sandbox/">Песочница</a></dd>
			</dl>
			<dl>
				<dt>Инфо</dt>
				<dd><a href="http://habrahabr.ru/info/about/">О сайте</a></dd>
				<dd><a href="http://habrahabr.ru/info/help/rules/">Правила</a></dd>
				<dd><a href="http://habrahabr.ru/info/help/">Помощь</a></dd>
				<dd><a href="http://habrahabr.ru/info/agreement/">Соглашение</a></dd>
				<dd><a href="http://habrahabr.ru/info/stats/">Статистика</a></dd>
			</dl>
			<dl>
				<dt>Услуги</dt>
				<dd><a href="http://habrahabr.ru/info/advertising/">Реклама</a></dd>
				<dd><a href="http://habrahabr.ru/info/advertising/corporate/">Корпоративные пакеты</a></dd>
				<dd><a href="http://habrahabr.ru/info/advertising/workshops/">Семинары</a></dd>
				<dd><a href="http://habrahabr.ru/special/">Спецпроекты</a></dd>
			</dl>
      <div class="copyright">
    		<a class="footer_logo" href="http://thematicmedia.ru/">Тематические Медиа</a>
    		<div class="about">
    			© 2006–2012<br>
    			«<a href="http://www.thematicmedia.ru/">Тематические Медиа</a>»
			<br><br>
			<a href="http://habrahabr.ru/feedback/">Служба поддержки</a><br><br>
			<a href="http://m.habrahabr.ru/">Мобильная версия</a>
		</div>
      </div>

</div>
		</div>
	 	
		
    
		
		
    <script type="text/javascript">
      $(document).ready(function(){
        // test gggg
        // настройки всплывающих уведомлений
        $.jGrowl.defaults.closerTemplate = '<div>Закрыть все уведомления</div>';         
        
        // настройки тултипов
        $(".help-tip").tipTip({maxWidth: "300px", edgeOffset: 10});  
        
      });
      // global vars
      var g_base_url = 'habrahabr.ru';
      var g_show_xpanel = false;
      var g_base_fullurl = 'http://habrahabr.ru/';
      var g_is_guest = false;
       
    </script>
		
    <script type="text/javascript" src="./index_files/shortcuts.js"></script>
		<script type="text/javascript" src="./index_files/to_top.js"></script>
		<link href="http://habrahabr.ru/styles/1354196613/_parts/_to_top.css" rel="stylesheet" media="all">

		
			<link href="./index_files/facebook_reader.css" rel="stylesheet" type="text/css">
			<script src="./index_files/facebook_reader.js" type="text/javascript"></script>
			<script type="text/javascript">
				$(document).ready(function(){
					new FacebookReader(
						$('#facebook_reader'),
						'437464306275519'
					);
				});
			</script>
		
		
		<script type="text/javascript" src="./index_files/float_block.js"></script>
		
		
		<!-- <script type="text/javascript" src="/javascripts/1354196613/_parts/float_block.js"></script> //-->
		
			
<script type="text/javascript">
	/*<![CDATA[*/
	var ga = document.createElement('script');
		ga.setAttribute('async', 'true');
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
	/* ]]>*/
</script>

<script type="text/javascript">
	var _gaq = _gaq || [];
	_gaq.push(
	    ['_setAccount', 'UA-726094-1'],
	    ['_setDomainName', '.habrahabr.ru'],
	    ["_addOrganic", "mail.ru", "q"],
	    ["_addOrganic","rambler.ru", "words"],
	    ["_addOrganic","nigma.ru", "s"],
	    ["_addOrganic","blogs.yandex.ru", "text"],
	    ["_addOrganic","webalta.ru", "q"],
	    ["_addOrganic","aport.ru", "r"],
	    ["_addOrganic","akavita.by", "z"],
	    ["_addOrganic","meta.ua", "q"],
	    ["_addOrganic","bigmir.net", "q"],
	    ["_addOrganic","tut.by", "query"],
	    ["_addOrganic","all.by", "query"],
	    ["_addOrganic","i.ua", "q"],
	    ["_addOrganic","online.ua", "q"],
	    ["_addOrganic","a.ua", "s"],
	    ["_addOrganic","ukr.net", "search_query"],
	    ["_addOrganic","search.com.ua", "q"],
	    ["_addOrganic","search.ua", "query"],
	    ["_addOrganic","poisk.ru", "text"],
	    ["_addOrganic","km.ru", "sq"],
	    ["_addOrganic","liveinternet.ru", "ask"],
	    ["_addOrganic","gogo.ru", "q"],
	    ["_addOrganic","gde.ru", "keywords"],
	    ["_addOrganic","quintura.ru", "request"],
	    ['_trackPageview']
	);
	document.documentElement.firstChild.appendChild(ga);
</script>	
		
		
		
	<script type="text/javascript" src="./index_files/saved_resource"></script>

		
		
		
	

<div id="AutocompleteContainter_254c8" style="position: absolute; z-index: 9999; top: 141px; left: 1009px;"><div class="autocomplete-w1"><div class="autocomplete" id="Autocomplete_254c8" style="display: none; width: 300px; max-height: 400px;"></div></div></div><div id="AutocompleteContainter_7d180" style="position: absolute; z-index: 9999; top: 0px; left: 0px;"><div class="autocomplete-w1"><div class="autocomplete" id="Autocomplete_7d180" style="display: none; width: 300px; max-height: 400px;"></div></div></div><div id="tiptip_holder" style="max-width:300px;"><div id="tiptip_arrow"><div id="tiptip_arrow_inner"></div></div><div id="tiptip_content"></div></div><div class="to_top" style="display: block;"><div class="to_top_panel"><div class="to_top_button" title="Наверх"><span class="arrow">↑</span> <span class="label">наверх</span></div>  </div></div><div id="fb-root" class=" fb_reset"><div style="position: absolute; top: -10000px; height: 0px; width: 0px;"><div><iframe id="fb_xdm_frame_http" name="fb_xdm_frame_http" src="./index_files/xd_arbiter.htm"></iframe><iframe id="fb_xdm_frame_https" name="fb_xdm_frame_https" src="./index_files/xd_arbiter(1).htm"></iframe></div></div><div style="position: absolute; top: -10000px; height: 0px; width: 0px;"><div></div></div></div><div id="sbi_camera_button" class="sbi_search" style="left: 0px; top: 0px; position: absolute; width: 29px; height: 27px; border: none; margin: 0px; padding: 0px; z-index: 2147483647; display: none;"></div><iframe src="./index_files/0(1).htm" style="width: 10px; height: 10px; position: absolute; top: -10000px; left: -10000px;"></iframe><iframe src="./index_files/0(3).htm" style="width: 10px; height: 10px; position: absolute; top: -10000px; left: -10000px;"></iframe></body></html>